Vibekit

Speicher-Übersicht

S3-kompatibler Dateispeicher, Bucket-Verwaltung und Pre-Signed Uploads.

Der Workspace storage bietet zwei Adaptermethoden: getSignedUploadUrl(path, options) und getSignedUrl(path, options). Beide liefern einen URL-String. Öffentliche Helfer namens uploadFile, deleteFile oder getSignedDownloadUrl gibt es nicht.

import { getSignedUploadUrl, getSignedUrl } from "storage";

const uploadUrl = await getSignedUploadUrl("avatars/example.png", {
  bucket: "vibekit",
  contentType: "image/png",
});
const downloadUrl = await getSignedUrl("avatars/example.png", {
  bucket: "vibekit",
  expiresIn: 300,
});

Rufen Sie diese Helfer serverseitig nach der Berechtigungsprüfung für Pfad und Bucket auf. S3-Upload-URLs gelten 60 Sekunden; die Download-Gültigkeit gibt der Aufrufer vor.

Speicher wählen

Der Adapter s3 unterstützt S3-kompatible Endpunkte wie S3, R2 und MinIO. Setzen Sie S3_ENDPOINT, S3_ACCESS_KEY_ID und S3_SECRET_ACCESS_KEY oder nutzen Sie das vorhandene S3-Setup-Formular. Der aktuelle Client verwendet Region auto und Path-Style-Adressen. Der Avatar-Bucket heißt NEXT_PUBLIC_AVATARS_BUCKET_NAME; S3_BUCKET und S3_REGION konfigurieren diesen Adapter nicht.

MOCK_SERVICES=true erzwingt Mock-Speicher. Ohne Endpunkt fällt die Anwendung außerhalb der Produktion auf Mock zurück; in Produktion meldet sie einen Fehler. STORAGE_PROVIDER=mock allein ist in Produktion nicht erlaubt. Außerhalb der Produktion unterstützen signierte URLs unter /api/storage/mock-upload und /api/storage/mock-file lokale Uploads und Lesezugriffe. Dateien liegen privat in einem temporären Verzeichnis, laufen nach einer Stunde ab und sind auf 100 Einträge begrenzt. MOCK_SERVICES=true kann im Produktionsmodus Mock-URLs auswählen und signieren, die Mock-HTTP-Routen lehnen Produktionsanfragen jedoch ab; nutzen Sie S3 für funktionierende Produktionsuploads.

Supabase Storage und Vercel Blob

Wählen Sie STORAGE_PROVIDER=supabase oder STORAGE_PROVIDER=vercelblob, oder speichern Sie den Anbieter unter /app/admin/setup. Anbieterwahl und Zugangsdaten aus Umgebungsvariablen haben Vorrang. Beide Adapter behalten signierte URLs und den Browser-Upload per PUT bei.

Für Supabase erstellen Sie einen privaten Storage-Bucket und erzeugen S3-Zugangsdaten in den Storage-Einstellungen. Setzen Sie SUPABASE_S3_ENDPOINT auf den S3-Endpunkt des Projekts, SUPABASE_S3_REGION auf dessen Region und SUPABASE_S3_ACCESS_KEY_ID / SUPABASE_S3_SECRET_ACCESS_KEY auf die erzeugten Werte. Diese Serverzugangsdaten umgehen RLS; die Signierungsprozeduren der Anwendung prüfen weiterhin die Eigentumsrechte. Verwenden Sie keinen Anon-Schlüssel und geben Sie S3-Zugangsdaten nie an den Browser weiter. Erlauben Sie im Bucket-CORS den Ursprung Ihrer Website und PUT/GET-Anfragen.

Für Vercel Blob erstellen Sie einen privaten Blob-Store und setzen dessen statischen BLOB_READ_WRITE_TOKEN. Der Adapter verlangt diesen Token; reine OIDC-Authentifizierung wird nicht unterstützt. Das Bucket-Argument dient als Objektpräfix innerhalb des Stores. Signierte Anwendungsrouten vermitteln Uploads und Downloads, ohne den Token offenzulegen. Uploads sind 60 Sekunden gültig und auf 4 MiB begrenzt, auch bei gestreamten Daten; Downloads beachten die angeforderte Ablaufzeit. Bestehende Avatarpfade können überschrieben werden. Der Proxy verwendet den Ursprung der Anwendung, daher ist kein Cross-Origin-Upload einzurichten. Ein Tokenwechsel macht bestehende signierte URLs ungültig.

Adapter ergänzen

Implementieren Sie StorageAdapter aus storage in packages/storage/provider/. Ergänzen Sie die Provider-ID im Storage-Tupel in packages/config/providers.ts sowie einen Lazy-Resolver in packages/storage/provider/index.ts. Zugangsdaten und Anbieter-SDK bleiben im Adapter. Für einen weiteren S3-kompatiblen Dienst reicht normalerweise eine Konfigurationsänderung.

Prüfen Sie Signierung, Inhaltstyp, Gültigkeit, Berechtigungen beim Aufrufer und Fehlerfälle vor dem Wechsel einer bereitgestellten App. Siehe Lokale MinIO-Einrichtung und Datei-Uploads.

Ergänzen Sie bei einer neuen Provider-ID auch den zugehörigen Zugangsdaten-Hinweiseintrag in packages/config/providers.ts. Dieser dient Produktvalidierung und Setup-Hinweisen; ein Product-Manifest wählt zur Laufzeit keinen Adapter automatisch aus.

On this page