26 lines
3.3 KiB
Markdown
26 lines
3.3 KiB
Markdown
|
|
### Как это работает
|
|||
|
|
|
|||
|
|
1. **Аутентификация**:
|
|||
|
|
- Клиент отправляет файл на сервер с заголовком `Authorization`, содержащим токен. Сервер проверяет наличие и валидность токена через API ядра, определяя пользователя.
|
|||
|
|
|
|||
|
|
2. **Загрузка файлов**:
|
|||
|
|
- Сервер обрабатывает все загружаемые файлы. Если файл является изображением, создается его миниатюра. И миниатюра, и оригинальное изображение загружаются в S3. Для остальных файлов выполняется простая загрузка в S3 без создания миниатюр.
|
|||
|
|
|
|||
|
|
3. **Создание миниатюр**:
|
|||
|
|
- Для всех загружаемых изображений сервер автоматически создает миниатюры различных размеров (10, 40, 110, 300, 600, 800, 1400 пикселей по ширине). Миниатюры сохраняются как отдельные файлы в том же S3 bucket, что и оригинальные изображения.
|
|||
|
|
|
|||
|
|
4. **Определение MIME-типа и расширения файла**:
|
|||
|
|
- MIME-тип и расширение файла определяются автоматически на основе имени файла и его содержимого с использованием библиотеки `mime_guess`.
|
|||
|
|
|
|||
|
|
5. **Загрузка файлов в S3**:
|
|||
|
|
- Все файлы, включая миниатюры и оригиналы изображений, загружаются в указанный S3 bucket. Сформированные URL-адреса файлов возвращаются клиенту.
|
|||
|
|
|
|||
|
|
6. **Управление квотами**:
|
|||
|
|
- Для каждого пользователя устанавливается общая квота на загрузку данных, которая составляет 5 ГБ. Перед загрузкой каждого нового файла проверяется, не превысит ли его размер текущую квоту пользователя. Если квота будет превышена, загрузка файла будет отклонена. После успешной загрузки файл и его размер регистрируются в Redis, и квота пользователя обновляется.
|
|||
|
|
|
|||
|
|
7. **Сохранение информации о загруженных файлах в Redis**:
|
|||
|
|
- Имя каждого загруженного файла сохраняется в Redis для отслеживания загруженных пользователем файлов. Это позволяет учитывать квоты и управлять пространством, занимаемым файлами.
|
|||
|
|
|
|||
|
|
8. **Оверлей для shout**:
|
|||
|
|
- При загрузке файла, если он является изображением, и в запросе присутствует параметр `s=<shout_id>`, то к файлу будет добавлен оверлей с данными shout.
|