Skip to content

S3 Service

Файл: backend/src/services/s3.rs

Сервис работы с S3-совместимым хранилищем. Управляет конфигурацией подключения, операциями с бакетами и объектами (загрузка, скачивание, удаление, метаданные).

Эндпоинты

МетодПутьФункцияОписание
POST/api/s3/configureconfigure_s3_svcНастроить подключение к S3
GET/api/s3/configuredis_s3_configured_svcПроверить наличие конфигурации
GET/api/s3/configget_s3_config_svcПолучить текущую конфигурацию
POST/api/s3/clearclear_s3_config_svcОчистить конфигурацию
GET/api/s3/bucketslist_buckets_svcСписок бакетов
POST/api/s3/bucketscreate_bucket_svcСоздать бакет
POST/api/s3/buckets/deletedelete_bucket_svcУдалить бакет
POST/api/s3/buckets/existsbucket_exists_svcПроверить существование бакета
POST/api/s3/objectslist_objects_svcСписок объектов
POST/api/s3/uploadupload_file_svcЗагрузить файл
POST/api/s3/downloaddownload_file_svcСкачать файл
POST/api/s3/objects/deletedelete_object_svcУдалить объект
POST/api/s3/folder/deletedelete_folder_svcУдалить папку (prefix)
POST/api/s3/objects/metadataget_object_metadata_svcМетаданные объекта
POST/api/s3/objects/existsobject_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 файл для промежуточного хранения.

Логика:

  1. HEAD-запрос для получения total size
  2. Проверяет существующий .part файл для определения resume_offset
  3. Скачивает чанками по 16 MB (MULTIPART_PART_SIZE) с Range header
  4. После каждого чанка — append + flush в .part файл
  5. По завершении — 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 файл.

Логика:

  1. Проверяет .upload файл рядом с исходным файлом
  2. Если есть — восстанавливает upload_id и список завершённых parts
  3. Пропускает уже загруженные parts
  4. После каждого part — обновляет .upload файл
  5. После complete_multipart_upload — удаляет .upload файл

configure_s3_svc

POST /api/s3/configure

Настраивает подключение к S3: endpoint, credentials, region.

Параметры

ИмяТипОписание
configS3ConfigКонфигурация (endpoint, access_key, secret_key, region)

Логика

  1. Вызывает state.init_s3(config) — создаёт S3Client
plantuml Diagram

is_s3_configured_svc / get_s3_config_svc / clear_s3_config_svc

Проверка, получение и очистка S3-конфигурации.

plantuml Diagram

list_buckets_svc

GET /api/s3/buckets

Возвращает список всех доступных S3-бакетов.

plantuml Diagram

create_bucket_svc / delete_bucket_svc / bucket_exists_svc

CRUD-операции с бакетами.

plantuml Diagram

list_objects_svc

POST /api/s3/objects

Список объектов в бакете с опциональным prefix-фильтром.

Параметры

ИмяТипОписание
bucket_nameStringИмя бакета
prefixOption<String>Фильтр по префиксу
plantuml Diagram

upload_file_svc

POST /api/s3/upload

Загружает локальный файл в S3-бакет.

Параметры

ИмяТипОписание
local_pathStringПуть к локальному файлу
bucket_nameStringИмя бакета
object_keyStringКлюч объекта в S3
plantuml Diagram

download_file_svc

POST /api/s3/download

Скачивает файл из S3 на локальный диск.

Возвращает

Result<u64, String> — размер скачанного файла в байтах

plantuml Diagram

delete_object_svc

POST /api/s3/objects/delete

Удаляет один объект из S3.

plantuml Diagram

delete_folder_svc

POST /api/s3/folder/delete

Удаляет все объекты с указанным prefix (эмуляция удаления папки в S3).

Логика

  1. Вызывает list_objects с prefix
  2. Batch-удаляет все найденные объекты
plantuml Diagram

get_object_metadata_svc / object_exists_svc

Получение метаданных и проверка существования объекта.

plantuml Diagram