ТTessora Docs

Хранилище файлов

S3-совместимое хранилище — Cloudflare R2 в prod, MinIO в dev

Все файлы (материалы задач, референсы, готовые ролики, safebot-видео) лежат в S3-совместимом хранилище:

  • Production — Cloudflare R2
  • Development — MinIO из docker-compose (localhost:9000, консоль :9001)

Клиент: src/lib/storage/r2.ts (AWS SDK v3). Переключение между R2 и MinIO — только через env (R2_ENDPOINT, R2_REGION, ключи).

Поток загрузки (presigned)

Файлы не проходят через сервер приложения:

1. POST /api/uploads/presign            → presigned PUT URL
2. Браузер: PUT файл напрямую в S3
3. POST /api/uploads/confirm/[fileId]   → запись FileObject в БД

FileObject хранит storageKey, bucket, mimeType, size и кто загрузил. Доменные модели (Material, ReadyContentFile, Reference, SafebotItem) ссылаются на объекты хранилища.

Функции клиента

ФункцияНазначение
getPresignedUrl(key)URL для прямой загрузки (PUT)
getPublicUrl(key)Публичный URL для отображения (R2_PUBLIC_URL)
deleteObject(key)Удаление объекта

Admin UI — /storage

Страница «Хранилище» (permission admin.manage_storage): статистика, просмотр файлов. Локально ссылается на MinIO-консоль (NEXT_PUBLIC_MINIO_CONSOLE_URL).

Удаление файлов в доменных моделях — soft delete. Физическая чистка хранилища — отдельная операция.

On this page