Vibekit

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.

  1. Der Client ruft uploads.signedUploadUrl mit bucket und path auf.
  2. Der Server erlaubt nur den konfigurierten NEXT_PUBLIC_AVATARS_BUCKET_NAME und 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.
  3. Der Browser sendet die zugeschnittene Datei per PUT an diese URL.
  4. Der Client ruft uploads.finalizeUpload mit dem Pfad auf; der Server lädt die gespeicherten Bytes und prüft sie als Bild (PNG/JPEG/WebP, 4 MiB, 16-Megapixel-Grenze).
  5. Erst nach erfolgreicher Prüfung speichert das Konto- oder Teamformular den Pfad über auth.update oder team.update. Beide Datensätze verwenden avatarUrl.

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.

On this page