Fix: TypeScript-Fehler im multer Upload-Endpoint

- @types/multer zu devDependencies hinzugefügt (fehlte → TS7016)
- Explizite Callback-Typen in diskStorage/fileFilter (TS7006)
- Express.Multer.File durch lokalen MulterFile-Type ersetzt (TS2694)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Bot 2026-03-01 22:25:10 +01:00
parent 52c86240af
commit db9a18b367
2 changed files with 9 additions and 6 deletions

View file

@ -24,6 +24,7 @@
"devDependencies": { "devDependencies": {
"@types/cors": "^2.8.17", "@types/cors": "^2.8.17",
"@types/express": "^4.17.21", "@types/express": "^4.17.21",
"@types/multer": "^1.4.12",
"@types/node": "^20.12.12", "@types/node": "^20.12.12",
"ts-node": "^10.9.2", "ts-node": "^10.9.2",
"typescript": "^5.5.4" "typescript": "^5.5.4"

View file

@ -1030,9 +1030,11 @@ app.post('/api/admin/sounds/rename', requireAdmin, (req: Request, res: Response)
}); });
// --- Datei-Upload (Drag & Drop) --- // --- Datei-Upload (Drag & Drop) ---
type MulterFile = { fieldname: string; originalname: string; encoding: string; mimetype: string; destination: string; filename: string; path: string; size: number; };
const uploadStorage = multer.diskStorage({ const uploadStorage = multer.diskStorage({
destination: (_req, _file, cb) => cb(null, SOUNDS_DIR), destination: (_req: any, _file: any, cb: (e: null, dest: string) => void) => cb(null, SOUNDS_DIR),
filename: (_req, file, cb) => { filename: (_req: any, file: { originalname: string }, cb: (e: null, name: string) => void) => {
const safe = file.originalname.replace(/[<>:"/\\|?*\x00-\x1f]/g, '_'); const safe = file.originalname.replace(/[<>:"/\\|?*\x00-\x1f]/g, '_');
const { name, ext } = path.parse(safe); const { name, ext } = path.parse(safe);
let finalName = safe; let finalName = safe;
@ -1046,7 +1048,7 @@ const uploadStorage = multer.diskStorage({
}); });
const uploadMulter = multer({ const uploadMulter = multer({
storage: uploadStorage, storage: uploadStorage,
fileFilter: (_req, file, cb) => { fileFilter: (_req: any, file: { originalname: string }, cb: (e: null, ok: boolean) => void) => {
const ext = path.extname(file.originalname).toLowerCase(); const ext = path.extname(file.originalname).toLowerCase();
cb(null, ext === '.mp3' || ext === '.wav'); cb(null, ext === '.mp3' || ext === '.wav');
}, },
@ -1054,9 +1056,9 @@ const uploadMulter = multer({
}); });
app.post('/api/upload', requireAdmin, (req: Request, res: Response) => { app.post('/api/upload', requireAdmin, (req: Request, res: Response) => {
uploadMulter.array('files', 20)(req, res, async (err) => { uploadMulter.array('files', 20)(req, res, async (err: any) => {
if (err) return res.status(400).json({ error: err.message ?? 'Upload fehlgeschlagen' }); if (err) return res.status(400).json({ error: err?.message ?? 'Upload fehlgeschlagen' });
const files = (req as any).files as Express.Multer.File[] | undefined; const files = (req as any).files as MulterFile[] | undefined;
if (!files?.length) return res.status(400).json({ error: 'Keine gültigen Dateien (nur MP3/WAV)' }); if (!files?.length) return res.status(400).json({ error: 'Keine gültigen Dateien (nur MP3/WAV)' });
const saved = files.map(f => ({ name: f.filename, size: f.size })); const saved = files.map(f => ({ name: f.filename, size: f.size }));
// Normalisierung im Hintergrund starten // Normalisierung im Hintergrund starten