Все шаблоны

Контент

Загрузка файлов

Прямая загрузка в S3 с прогрессом и превью

Среднийфайлыs3загрузкапревью

Файлы уходят в хранилище напрямую из браузера по подписанной ссылке — сервер не держит поток и не упирается в лимит тела запроса. Проверка типа и размера, превью картинок, приватные ссылки со сроком жизни.

Что внутри

  • Загрузка напрямую в S3 по подписанной ссылке
  • Прогресс, отмена и повтор при обрыве
  • Проверка типа по содержимому, а не по расширению
  • Приватные файлы по ссылке со сроком жизни

Что добавит в проект

Поверх общей базы — она уже даёт авторизацию, базу и интерфейс.

Таблицы в базе1

uploads

Пакеты npm2

@aws-sdk/client-s3@aws-sdk/s3-request-presigner

Маршруты2

/api/uploads/sign/api/uploads/complete

Переменные окружения4

S3_ENDPOINTS3_BUCKETS3_ACCESS_KEY_IDS3_SECRET_ACCESS_KEY
S3_ENDPOINT
Адрес S3-совместимого хранилища
S3_BUCKET
Имя бакета
S3_ACCESS_KEY_ID
Идентификатор ключа доступа
S3_SECRET_ACCESS_KEY
Секретный ключ

Разбор архитектуры

Расширение файла ничего не гарантирует: тип проверяется по сигнатуре содержимого. Запись в базе создаётся до загрузки со статусом «ожидается» и подтверждается после — иначе в базе появляются ссылки на файлы, которых нет, потому что пользователь закрыл вкладку на середине.

Общая база

Пустое, но рабочее приложение: авторизация, база, UI-кит и деплой уже собраны и связаны между собой. Модули не переписывают его файлы — они добавляют свои и регистрируются в готовых точках расширения, поэтому их можно ставить в любом сочетании.

Next.js 16 (App Router)TypeScriptPostgreSQL + Drizzle ORMAuth.jsTailwind CSS + shadcn/uiDocker
Загрузка файлов — модуль · Digital Motion