Vercel Blob Storage
Коротко: Служба зберігання файлів від Vercel (схожа на S3 від AWS) для завантаження й роздачі файлів, таких як зображення чи завантаження, напряму пов’язана з проєктом Vercel.
Докладніше: Сховище (store) буває або публічним (будь-хто, хто має URL, може побачити файл — підходить для зображень товарів), або приватним (доступ лише через підписані URL/виділений маршрут перевірки — підходить для конфіденційних вкладень). У проєкту одночасно може бути кілька сховищ.
Наш контекст: В Emzett два окремі сховища — публічне для зображень товарів/банерів і приватне для вкладень чату й тікетів, а також завантажень ПЗ (які видаються лише після перевірки купівлі).
Подробиці
Чому не просто public/?
Ключова перевага перед «просто покласти файли в каталог public/ проєкту Next.js»: файли в теці public/ — частина самого деплою; кожне нове завантаження зображення товару вимагало б повного нового деплою, а тека з часом необмежено зростала б у репозиторії Git, без потреби роздуваючи час клонування й розмір деплою. Blob-сховище, навпаки, — самостійна служба зберігання, у яку файли можна завантажувати прямо з браузера під час виконання, без повторного деплою:
import { put } from "@vercel/blob";
const blob = await put("product-image.jpg", file, {
access: "public",
});
// blob.url -> публічний URL, придатний до прямого використанняПряме завантаження клієнтом замість обходу через сервер
Часто недооцінена деталь: Vercel Blob підтримує клієнтські завантаження прямо з браузера в blob-сховище, БЕЗ потреби спочатку повністю пропускати файл через ваш власний сервер. Це обходить два практичні обмеження: зазвичай обмежений розмір тіла запиту в serverless-функцій і зайве навантаження на сервер від простого «пропускання» великих файлів. Для цього ваш сервер спочатку створює недовговічний підписаний URL завантаження, який потім напряму використовує браузер — ваш сервер ніколи не бачить сам файл, лише підтвердження успішного завантаження.
Публічні та приватні докладно
У приватних сховищах захист доступу походить не від самого URL (він навмисно не вгадується, але технічно це все ж лише «безпека через неясність»); натомість доступ має йти через виділений маршрут, що перевіряється на сервері, — наприклад, API-маршрут, який спочатку перевіряє, що користувач справді купив відповідний товар, і лише потім повертає недовговічний підписаний URL для завантаження. Ці підписані URL чинні обмежений час (зазвичай від хвилин до кількох годин) — навіть якщо URL помилково передано далі, він автоматично втрачає силу після закінчення строку, і нікому не потрібно втручатися вручну.
Порівняння з класичними службами об’єктного зберігання
Концептуально Vercel Blob Storage — спрощене об’єктне сховище, подібне до AWS S3 чи Cloudflare R2: усі три зберігають файли як неструктуровані «об’єкти» під унікальним ключем/шляхом, а не в класичній файловій системі зі справжніми структурами каталогів. Різниця здебільшого в глибині інтеграції: Vercel Blob вбудований прямо в платформу Vercel (не потрібне окреме налаштування хмарного облікового запису, оплата напряму через той самий обліковий запис Vercel), тоді як S3 як самостійна служба AWS потребує більше зусиль із налаштування, але пропонує й ширший набір функцій (наприклад, детальні права IAM).