S3 Service
Файл:
backend/src/services/s3.rs
Сервис работы с S3-совместимым хранилищем. Управляет конфигурацией подключения, операциями с бакетами и объектами (загрузка, скачивание, удаление, метаданные).
Эндпоинты
| Метод | Путь | Функция | Описание |
|---|---|---|---|
| POST | /api/s3/configure | configure_s3_svc | Настроить подключение к S3 |
| GET | /api/s3/configured | is_s3_configured_svc | Проверить наличие конфигурации |
| GET | /api/s3/config | get_s3_config_svc | Получить текущую конфигурацию |
| POST | /api/s3/clear | clear_s3_config_svc | Очистить конфигурацию |
| GET | /api/s3/buckets | list_buckets_svc | Список бакетов |
| POST | /api/s3/buckets | create_bucket_svc | Создать бакет |
| POST | /api/s3/buckets/delete | delete_bucket_svc | Удалить бакет |
| POST | /api/s3/buckets/exists | bucket_exists_svc | Проверить существование бакета |
| POST | /api/s3/objects | list_objects_svc | Список объектов |
| POST | /api/s3/upload | upload_file_svc | Загрузить файл |
| POST | /api/s3/download | download_file_svc | Скачать файл |
| POST | /api/s3/objects/delete | delete_object_svc | Удалить объект |
| POST | /api/s3/folder/delete | delete_folder_svc | Удалить папку (prefix) |
| POST | /api/s3/objects/metadata | get_object_metadata_svc | Метаданные объекта |
| POST | /api/s3/objects/exists | object_exists_svc | Проверить существование объекта |
Зависимости
SharedState— глобальное состояние (содержитS3ClientиS3Config)S3Client— HTTP-клиент для S3 API (MinIO, AWS S3, etc.)
Дополнительные методы S3Client
Помимо endpoint-сервисов, S3Client предоставляет методы с поддержкой resume:
download_file_chunked
async fn download_file_chunked(&self, bucket, key, local_path, on_progress) -> Result<u64>
Скачивает файл из S3 с поддержкой resume через HTTP Range requests. Использует .part файл для промежуточного хранения.
Логика:
- HEAD-запрос для получения total size
- Проверяет существующий
.partфайл для определенияresume_offset - Скачивает чанками по 16 MB (MULTIPART_PART_SIZE) с Range header
- После каждого чанка — append + flush в
.partфайл - По завершении — rename
.part→ final path
upload_file_multipart_resumable
async fn upload_file_multipart_resumable(&self, local_path, bucket, key) -> Result<()>
Multipart upload с поддержкой resume через .upload JSON sidecar файл.
Логика:
- Проверяет
.uploadфайл рядом с исходным файлом - Если есть — восстанавливает
upload_idи список завершённых parts - Пропускает уже загруженные parts
- После каждого part — обновляет
.uploadфайл - После
complete_multipart_upload— удаляет.uploadфайл
configure_s3_svc
POST /api/s3/configure
Настраивает подключение к S3: endpoint, credentials, region.
Параметры
| Имя | Тип | Описание |
|---|---|---|
config | S3Config | Конфигурация (endpoint, access_key, secret_key, region) |
Логика
- Вызывает
state.init_s3(config)— создаёт S3Client
is_s3_configured_svc / get_s3_config_svc / clear_s3_config_svc
Проверка, получение и очистка S3-конфигурации.
list_buckets_svc
GET /api/s3/buckets
Возвращает список всех доступных S3-бакетов.
create_bucket_svc / delete_bucket_svc / bucket_exists_svc
CRUD-операции с бакетами.
list_objects_svc
POST /api/s3/objects
Список объектов в бакете с опциональным prefix-фильтром.
Параметры
| Имя | Тип | Описание |
|---|---|---|
bucket_name | String | Имя бакета |
prefix | Option<String> | Фильтр по префиксу |
upload_file_svc
POST /api/s3/upload
Загружает локальный файл в S3-бакет.
Параметры
| Имя | Тип | Описание |
|---|---|---|
local_path | String | Путь к локальному файлу |
bucket_name | String | Имя бакета |
object_key | String | Ключ объекта в S3 |
download_file_svc
POST /api/s3/download
Скачивает файл из S3 на локальный диск.
Возвращает
Result<u64, String> — размер скачанного файла в байтах
delete_object_svc
POST /api/s3/objects/delete
Удаляет один объект из S3.
delete_folder_svc
POST /api/s3/folder/delete
Удаляет все объекты с указанным prefix (эмуляция удаления папки в S3).
Логика
- Вызывает
list_objectsс prefix - Batch-удаляет все найденные объекты
get_object_metadata_svc / object_exists_svc
Получение метаданных и проверка существования объекта.