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) |