diff --git a/src/lib/api.ts b/src/lib/api.ts index 2b91ead..5e63b3e 100644 --- a/src/lib/api.ts +++ b/src/lib/api.ts @@ -481,17 +481,21 @@ export const paypalClientId = (s: PublicSettings | null) => /** Lädt eine Datei nach Directus und liefert deren ID. */ export async function uploadFile(datei: File): Promise { - const form = new FormData(); - form.append('file', datei); - - const session = await ensureFreshToken(); - const res = await fetch(`${BASE}/files`, { - method: 'POST', - headers: session ? { Authorization: `Bearer ${session.access_token}` } : undefined, - body: form, + // Als Base64 (Data-URL) an den öffentlichen Upload-Proxy schicken – so können + // auch Gäste (Bestellung ohne Login) Motive/Quelldateien hochladen. Der direkte + // Directus-/files-Upload braucht einen Token, den Gäste nicht haben. + const data_base64 = await new Promise((resolve, reject) => { + const r = new FileReader(); + r.onload = () => resolve(String(r.result || '')); + r.onerror = () => reject(new Error('Datei konnte nicht gelesen werden.')); + r.readAsDataURL(datei); }); - const data = await parse(res); - return data?.data?.id; + const data = await request('/skrift-orders/upload', { + method: 'POST', + auth: false, + body: { filename: datei.name, content_type: datei.type || 'application/octet-stream', data_base64 }, + }); + return data?.id; } /* ── Angebotsanfrage ──────────────────────────────────────────────────────── */