Vercel Blob Storage
Kurz: Ein Datei-Speicherdienst von Vercel (ähnlich AWS S3) zum Hochladen und Ausliefern von Dateien wie Bildern oder Downloads, direkt ans Vercel-Projekt angebunden.
Genauer: Ein Store ist entweder Public (jeder mit der URL kann die Datei sehen — passend für Produktbilder) oder Private (Zugriff nur über signierte URLs/eine eigene Prüf-Route — passend für vertrauliche Anhänge). Ein Projekt kann mehrere Stores gleichzeitig haben.
Kontext bei uns: Zwei getrennte Stores bei Emzett — ein öffentlicher für Produktbilder/Banner, ein privater für Chat- und Ticket-Anhänge sowie Software-Downloads (die nur nach Kaufprüfung ausgeliefert werden).
Im Detail
Warum nicht einfach public/?
Ein zentraler Vorteil gegenüber “Dateien einfach ins public/-Verzeichnis des Next.js-Projekts legen”: Dateien im public/-Ordner sind Teil des Deployments selbst — jede neue Produktbild-Upload würde einen kompletten neuen Deploy erfordern, und der Ordner würde mit der Zeit beliebig groß im Git-Repo, was Clone-Zeiten und Deployment-Größe unnötig aufbläht. Blob Storage ist dagegen ein eigenständiger Speicherdienst, in den zur Laufzeit direkt vom Browser aus hochgeladen werden kann, ganz ohne Redeploy:
import { put } from "@vercel/blob";
const blob = await put("produktbild.jpg", file, {
access: "public",
});
// blob.url -> direkt nutzbare, öffentliche URLDirekter Client-Upload statt Server-Umweg
Ein oft übersehenes Detail: Vercel Blob unterstützt Client-seitige Uploads direkt vom Browser zum Blob-Store, OHNE dass die Datei erst komplett über den eigenen Server geleitet werden muss. Das umgeht zwei praktische Limits: die typischerweise begrenzte Request-Body-Größe bei Serverless Functions, und unnötige Serverlast beim reinen “Durchreichen” großer Dateien. Dafür generiert der eigene Server zunächst eine kurzlebige, signierte Upload-URL, die der Browser dann direkt nutzt — der eigene Server sieht die Datei selbst nie, nur die Bestätigung, dass der Upload erfolgreich war.
Public vs. Private im Detail
Bei Private-Stores kommt der Zugriffsschutz nicht aus der URL selbst (die ist absichtlich nicht erratbar, aber technisch trotzdem nur “security through obscurity”), sondern muss über eine eigene, serverseitig geprüfte Route laufen — z. B. eine API-Route, die erst verifiziert, dass ein Nutzer das betreffende Produkt tatsächlich gekauft hat, und erst dann eine kurzlebige, signierte Download-URL zurückgibt. Diese signierten URLs sind zeitlich begrenzt gültig (typischerweise Minuten bis wenige Stunden) — selbst wenn eine URL versehentlich weitergegeben wird, verliert sie nach Ablauf automatisch ihre Gültigkeit, ohne dass jemand manuell eingreifen müsste.
Vergleich zu klassischen Objektspeicher-Diensten
Konzeptionell ist Vercel Blob Storage ein vereinfachter Objektspeicher, ähnlich wie AWS S3 oder Cloudflare R2 — alle drei speichern Dateien als unstrukturierte “Objekte” unter einem eindeutigen Schlüssel/Pfad, statt in einem klassischen Dateisystem mit echten Verzeichnisstrukturen. Der Unterschied liegt vor allem in der Integrationstiefe: Vercel Blob ist direkt in die Vercel-Plattform eingebettet (keine separate Cloud-Account-Einrichtung nötig, direkte Abrechnung über denselben Vercel-Account), während S3 als eigenständiger AWS-Dienst mehr Konfigurationsaufwand, aber auch mehr Funktionsumfang (z. B. feingranulare IAM-Berechtigungen) bietet.