Motiv-/Datei-Upload: ueber oeffentlichen Proxy (Gaeste ohne Login)
uploadFile schickt die Datei als Base64 an /skrift-orders/upload statt direkt an Directus /files (das braucht einen Token, den Gaeste nicht haben). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -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<string> {
|
||||
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<string>((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 ──────────────────────────────────────────────────────── */
|
||||
|
||||
Reference in New Issue
Block a user