.gitea/workflows | ||
src | ||
.gitignore | ||
Cargo.lock | ||
Cargo.toml | ||
Dockerfile | ||
nginx.conf.sigil | ||
README.md |
Квотер
Управляет квотами на загрузку файлов и их размещением в S3-хранилище. Поддерживает создание миниатюр для изображений и управляет квотами на использование дискового пространства для каждого пользователя с использованием Redis.
Основные функции
- Миниатюры: Автоматическое создание миниатюр для изображений.
- S3/STORJ интеграция: Загрузка файлов в через
aws-sdk-s3
и возврат публичных URL-адресов. - Управление квотами: Ограничение объема загружаемых данных для каждого пользователя с использованием Redis.
- Отслеживание файлов: Хранение информации о загруженных файлах в Redis для управления квотами.
Как это работает
-
Аутентификация:
- Клиент отправляет файл на сервер с заголовком
Authorization
, содержащим токен. Сервер проверяет наличие и валидность токена, определяя пользователя.
- Клиент отправляет файл на сервер с заголовком
-
Загрузка файлов:
- Сервер обрабатывает все загружаемые файлы. Если файл является изображением, создается его миниатюра. И миниатюра, и оригинальное изображение загружаются в S3. Для остальных файлов выполняется простая загрузка в S3 без создания миниатюр.
-
Создание миниатюр:
- Для всех загружаемых изображений сервер автоматически создает миниатюры размером 320x320 пикселей. Миниатюры сохраняются как отдельные файлы в том же S3 bucket, что и оригинальные изображения.
-
Определение MIME-типа и расширения файла:
- MIME-тип и расширение файла определяются автоматически на основе имени файла и его содержимого с использованием библиотеки
mime_guess
.
- MIME-тип и расширение файла определяются автоматически на основе имени файла и его содержимого с использованием библиотеки
-
Загрузка файлов в S3:
- Все файлы, включая миниатюры и оригиналы изображений, загружаются в указанный S3 bucket. Сформированные URL-адреса файлов возвращаются клиенту.
-
Управление квотами:
- Для каждого пользователя устанавливается квота на загрузку данных, которая составляет 1 ГБ в неделю. Перед загрузкой каждого нового файла проверяется, не превысит ли его размер текущую квоту пользователя. Если квота будет превышена, загрузка файла будет отклонена. После успешной загрузки файл и его размер регистрируются в Redis, и квота пользователя обновляется.
-
Сохранение информации о загруженных файлах в Redis:
- Имя каждого загруженного файла сохраняется в Redis для отслеживания загруженных пользователем файлов. Это позволяет учитывать квоты и управлять пространством, занимаемым файлами.
-
Оверлей для shout:
- При загрузке файла, если он является изображением, и в запросе присутствует параметр
s=<shout_id>
, то к файлу будет добавлен оверлей с данными shout.
- При загрузке файла, если он является изображением, и в запросе присутствует параметр
Использование
Нужно задать следующие переменные среды:
REDIS_URL
: URL для подключения к Redis. Используется для управления квотами и хранения информации о загружаемых файлах.CDN_DOMAIN
: Домен CDN для генерации публичных URL-адресов загруженных файлов.AUTH_URL
: URL для подключения к сервису аутентификации.CORE_URL
: URL для подключения к сервису core.STORJ_ACCESS_KEY
,STORJ_SECRET_KEY
,AWS_ACCESS_KEY
,AWS_SECRET_KEY