Datei-Uploads verarbeiten
Benutzeravatare, Teamlogos, Bildzuschnitt und Client-Upload-Abläufe.
Die Avatar-UI liegt in apps/web/modules/saas/settings/components/AvatarUpload.tsx und CropImageDialog.tsx. Nach der Bildauswahl können Benutzer das Bild im Canvas-Dialog zuschneiden und zoomen.
- Der Client ruft
uploads.signedUploadUrlmitbucketundpathauf. - Der Server erlaubt nur den konfigurierten
NEXT_PUBLIC_AVATARS_BUCKET_NAMEund einen Pfad des Benutzers oder eines Teams, dessen Eigentümer er ist. Er speichert den Upload-Vertrag und fordert eine signierte PNG-Upload-URL an; die S3-URL gilt 60 Sekunden. - Der Browser sendet die zugeschnittene Datei per
PUTan diese URL. - Der Client ruft
uploads.finalizeUploadmit dem Pfad auf; der Server lädt die gespeicherten Bytes und prüft sie als Bild (PNG/JPEG/WebP, 4 MiB, 16-Megapixel-Grenze). - Erst nach erfolgreicher Prüfung speichert das Konto- oder Teamformular den Pfad über
auth.updateoderteam.update. Beide Datensätze verwendenavatarUrl.
Der allgemeine Speicherhelfer übernimmt keine Berechtigungsprüfung des Aufrufers. Verwenden Sie die vorhandenen Prozeduren, statt beliebige Buckets und Pfade im Browser signieren zu lassen.
Feedback-Anhänge
uploads.signedFeedbackUploadUrl prüft Bildtypen und passende Dateiendungen, speichert einen server-eigenen Upload-Vertrag (eine Stunde gültig, Tageskontingent je Akteur) und liefert { uploadUrl, fileUrl, path, uploadId }. fileUrl ist eine signierte Referenz, keine frei zugängliche Objekt-URL. Nach dem PUT ruft der Client uploads.finalizeUpload mit der uploadId auf; nur geprüfte (VERIFIED) Uploads können genau einmal über feedback.create({ uploadId }) angehängt werden. Abgelaufene oder bereits verwendete IDs werden abgelehnt, verwaiste Datensätze räumt scripts/prune-uploads.mjs auf. Die Anhang-Routen prüfen den Zugriff vor der Download-Freigabe; der zugrunde liegende Bucket muss privat bleiben.
Der Serverdatensatz bewahrt ausstellenden Benutzer oder Team, Anbieter und Bucket, erwarteten Content-Type, Prüfergebnis, Abmessungen, Byte-Größe, Ablauf und die Feedback-Zuordnung. Ein erneuter Avatar-Upload setzt den Prüfstatus nur zurück, wenn derselbe Eigentümer denselben erlaubten Pfad anfordert. Clients können diese Zuordnung nicht durch einen anderen Pfad oder eine andere ID ändern oder einen Upload eines anderen Akteurs anhängen.
Mock-Speicher schreibt in der Entwicklung temporäre lokale Dateien und unterstützt signierte Lesezugriffe, mit einer Stunde Aufbewahrung und maximal 100 Einträgen. Seine HTTP-Routen lehnen Anfragen im Produktionsmodus ab. Nutzen Sie einen echten lokalen S3-kompatiblen Dienst für Anbieter-Schreibzugriffe, CORS und anschließende Lesetests.