import type { AllowedType } from '@/lib/files/magic' /** * Der Name, unter dem eine Datei ausgeliefert wird. * * Die Endung folgt dem **erkannten** Typ, nicht dem hochgeladenen Namen. Das * fängt den Fall ab, dass eine Datei zwei Formate zugleich bedient: wird sie * als Text erkannt, kommt sie als `.txt` an und landet in keinem * PDF-Betrachter, auch wenn sie ursprünglich `bericht.pdf` hiess. * * Alles, was eine Kopfzeile zerlegen könnte, fliegt raus. Der vollständige, * ursprüngliche Name steht in `filename*` daneben. */ const ENDUNGEN: Record = { 'image/png': 'png', 'image/jpeg': 'jpg', 'image/webp': 'webp', 'application/pdf': 'pdf', 'text/plain': 'txt', } export function deliveryFileName(originalName: string, mimeType: AllowedType | string): string { const endung = ENDUNGEN[mimeType] const sauber = originalName .replace(/[\r\n"\\]/g, '') .replace(/[^\w.\- ]/g, '_') .trim() .slice(0, 100) const basis = (endung ? sauber.replace(/\.[A-Za-z0-9]{1,8}$/, '') : sauber) || 'datei' return endung ? `${basis}.${endung}` : basis }