Перейти к содержанию

Media Service

Media Service отвечает за загрузку и обработку файлов.

Обзор

Параметр Значение
Порт 8085
База данных postgres-shared
Схема media_service
Хранилище MinIO (S3-compatible)

Ответственности

  • Загрузка файлов
  • Валидация типов и размеров
  • Обработка изображений (resize)
  • Генерация signed URLs
  • Cleanup неиспользуемых файлов

API Endpoints

Method Endpoint Description
POST /api/v1/media/upload Загрузка файла
GET /api/v1/media/{id} Метаданные файла
GET /api/v1/media/{id}/url Signed URL
DELETE /api/v1/media/{id} Удаление файла

Ограничения

Категория MIME Types Max Size
Изображения image/jpeg, image/png, image/webp, image/gif 5 MB
Документы application/pdf 10 MB

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

Процесс: 1. Валидация MIME type и размера 2. Генерация уникального пути в хранилище 3. Загрузка файла в MinIO 4. Сохранение метаданных в БД 5. Создание вариантов для изображений (асинхронно)

Валидация: - Пустой файл отклоняется - Неподдерживаемый MIME type отклоняется - Превышение лимита размера отклоняется

Варианты изображений

Вариант Размер (px) Использование
THUMBNAIL 150×150 Превью в списках
SMALL 300×300 Карточки
MEDIUM 600×600 Детальный просмотр
LARGE 1200×1200 Полноэкранный режим

Логика: - Варианты создаются только для изображений - Сохраняют пропорции (fit within) - Каждый вариант хранится отдельно в MinIO

Signed URLs

Параметры: - Время жизни: 1 час - Поддержка вариантов изображений - Защита от прямого доступа

Использование: - Frontend запрашивает signed URL - URL используется для отображения/скачивания - По истечении TTL URL становится невалидным

Статусы файлов

Статус Описание
UPLOADING В процессе загрузки
PROCESSING Обработка (resize)
READY Готов к использованию
DELETED Удалён

Cleanup Job

Расписание: Каждый день в 3:00

Логика: 1. Поиск файлов старше 24 часов без привязки к сущностям 2. Удаление файла и всех вариантов из MinIO 3. Установка статуса DELETED

Привязка к сущностям: - Event cover image → events.cover_image_id - Organization logo → organizations.logo_id - User avatar → users.avatar_id

Конфигурация

Переменная Описание
MINIO_ENDPOINT URL MinIO сервера
MINIO_ACCESS_KEY Access key
MINIO_SECRET_KEY Secret key
MINIO_BUCKET Имя bucket (default: aqstream-media)

Дальнейшее чтение