Vercel Blob Storage
Kısaca: Görüntüler veya indirmeler gibi dosyaları yüklemek ve sunmak için Vercel’in bir dosya depolama hizmeti (AWS S3’e benzer), doğrudan Vercel projesine bağlı.
Biraz daha ayrıntılı: Bir depo (store) ya herkese açıktır (URL’ye sahip herkes dosyayı görebilir — ürün görselleri için uygun) ya da özeldir (erişim yalnızca imzalı URL’ler/özel bir denetim rotası üzerinden — gizli ekler için uygun). Bir projenin aynı anda birkaç deposu olabilir.
Bizim bağlamımız: Emzett’te iki ayrı depo — ürün görselleri/afişler için herkese açık bir tane, sohbet ve bilet ekleri ile yazılım indirmeleri için özel bir tane (bunlar yalnızca satın alma denetlendikten sonra teslim edilir).
Ayrıntılı
Neden basitçe public/ değil?
“Dosyaları Next.js projesinin public/ dizinine koymaya” göre merkezî bir avantaj: public/ klasöründeki dosyalar dağıtımın kendisinin parçasıdır — her yeni ürün görseli yüklemesi eksiksiz yeni bir dağıtım gerektirirdi ve klasör zamanla Git deposunda keyfi büyür, klonlama sürelerini ve dağıtım boyutunu gereksiz şişirirdi. Blob depolama ise çalışma zamanında, yeniden dağıtım olmadan, doğrudan tarayıcıdan dosya yüklenebilen bağımsız bir depolama hizmetidir:
import { put } from "@vercel/blob";
const blob = await put("product-image.jpg", file, {
access: "public",
});
// blob.url -> doğrudan kullanılabilir herkese açık URLSunucu üzerinden dolaşmak yerine doğrudan istemci yüklemesi
Çoğunlukla gözden kaçan bir ayrıntı: Vercel Blob, dosyanın önce tamamen kendi sunucunuzdan geçmesine GEREK KALMADAN, tarayıcıdan doğrudan blob deposuna istemci tarafı yüklemeleri destekler. Bu, iki pratik sınırı aşar: sunucusuz işlevlerin tipik olarak sınırlı istek gövdesi boyutu ve büyük dosyaların yalnızca “içinden geçirilmesinden” kaynaklanan gereksiz sunucu yükü. Bunun için kendi sunucunuz önce kısa ömürlü, imzalı bir yükleme URL’si üretir; tarayıcı bunu doğrudan kullanır — kendi sunucunuz dosyanın kendisini asla görmez, yalnızca yüklemenin başarılı olduğu onayını.
Herkese açık ve özel ayrıntılı
Özel depolarda erişim koruması URL’nin kendisinden gelmez (bilerek tahmin edilemezdir, ancak teknik olarak yine de yalnızca “belirsizlikle güvenlik”); bunun yerine sunucuda denetlenen özel bir rotadan geçmelidir — örn. önce bir kullanıcının ilgili ürünü gerçekten satın aldığını doğrulayan ve ancak sonra kısa ömürlü, imzalı bir indirme URL’si döndüren bir API rotası. Bu imzalı URL’ler yalnızca sınırlı bir süre geçerlidir (tipik olarak dakikalardan birkaç saate) — bir URL yanlışlıkla iletilse bile süre dolunca kendiliğinden geçerliliğini yitirir; kimsenin elle müdahale etmesine gerek yoktur.
Klasik nesne depolama hizmetleriyle karşılaştırma
Kavramsal olarak Vercel Blob Storage, AWS S3 veya Cloudflare R2’ye benzer basitleştirilmiş bir nesne deposudur — üçü de dosyaları gerçek dizin yapılarına sahip klasik bir dosya sistemi yerine benzersiz bir anahtar/yol altında yapılandırılmamış “nesneler” olarak saklar. Fark esas olarak entegrasyon derinliğindedir: Vercel Blob doğrudan Vercel platformuna gömülüdür (ayrı bir bulut hesabı kurulumu gerekmez, aynı Vercel hesabı üzerinden doğrudan faturalanır); bağımsız bir AWS hizmeti olarak S3 ise daha fazla yapılandırma çabası gerektirir ama daha geniş bir işlev yelpazesi de sunar (örn. ayrıntılı IAM izinleri).