nav-img
Evolution

Загрузить мультикомпонентный (multipart) объект в бакет Object Storage

Мультикомпонентная загрузка используется для загрузки в бакет Object Storage больших файлов. Такой подход позволяет избегать повторной загрузки всего файла при возникновении сетевых сбоев. Вам потребуется только повторно загрузить ту часть, при загрузке которой возникла проблема.

Перед началом работы

  1. Установите Git на ваше устройство.

  2. Разбейте файл на части:

    split -b <part_size> ./<file_name> part.

    Где:

    • <part_size> — размер частей, на которые разбивается файл.

      Например, 10М. Файл разбивается на части по 10 МБ.

    • <file_name> — название файла, который необходимо разбить на части.

      Указывается с расширением, например .exe.

    • part. — префикс, который будет присвоен частям файла.

  3. Посмотрите список частей файла:

    ls -l

    Результат:

    total 137280
    -rwxr-xr-x 1 user 1049089 70287136 Jun 3 15:40 program.exe
    -rwxr-xr-x 1 user 1049089 10485760 Jun 3 15:49 part.aa
    -rw-r--r-- 1 user 1049089 10485760 Jun 3 15:49 part.ab
    -rw-r--r-- 1 user 1049089 10485760 Jun 3 15:49 part.ac
    -rw-r--r-- 1 user 1049089 10485760 Jun 3 15:49 part.ad
    -rw-r--r-- 1 user 1049089 10485760 Jun 3 15:49 part.ae
    -rw-r--r-- 1 user 1049089 10485760 Jun 3 15:49 part.af
    -rw-r--r-- 1 user 1049089 7372576 Jun 3 15:49 part.ag

Создайте составную загрузку


Если у вас еще нет AWS CLI, установите и настройте его.

  1. Получите список бакетов:

    aws s3api list-buckets --endpoint-url=https://s3.cloud.ru

    Результат:

    {
    "Buckets": [
    {
    "Name": "my-cool-bucket",
    "CreationDate": "2025-06-03T13:07:14.240000+00:00"
    }
    ],
    "Owner": {
    "ID": "2c952e80-5053-4005-8854-16b4********"
    },
    "Prefix": null
    }
  2. Создайте загрузку составного объекта:

    aws s3api create-multipart-upload \
    --endpoint-url=https://s3.cloud.ru \
    --bucket <bucket_name> \
    --key <object_key>

    Где:

    • <bucket_name> — название бакета.

    • <object_key> — ключ объекта, под которым он будет храниться в бакете.

    Результат:

    {
    "Bucket": "my-cool-bucket",
    "Key": "program.exe",
    "UploadId": "ef017a868777********"
    }

    Сохраните значение поля UploadId — оно потребуется для выполнения следующих шагов.

Загрузите составные части в бакет

Загрузите первую часть объекта:


aws s3api upload-part \
--endpoint-url=https://s3.cloud.ru \
--bucket <bucket_name> \
--key <object_key> \
--upload-id <upload_id> \
--part-number <number> \
--body <path_to_file>

Где:

  • <bucket_name> — название бакета.

  • <object_key> — ключ объекта, под которым он будет храниться в бакете.

  • <upload_id> — значение поля UploadId, полученное на предыдущем шаге.

  • <number> — порядковый номер части объекта.

    Он необходим для задания правильной последовательности сборки частей в бакете. Номер задается в диапазоне от 1 до 10 000 включительно.

  • <path_to_file> — путь к части файла.

Результат:

{
"ETag": "\"500def58592d4535345ce5d********\""
}

Сохраните значение поля ETag — оно понадобится при сборке объекта в бакете.

Повторите загрузку для всех частей файла. Сохраните ETag каждого из них.

Соберите объект в бакете

Как только все части объекта окажутся в бакете, их необходимо собрать.


  1. Выполните команду:

    aws s3api complete-multipart-upload \
    --endpoint-url=https://s3.cloud.ru \
    --bucket <bucket_name> \
    --key <object_key> \
    --upload-id <upload_id> \
    --multipart-upload \
    '{"Parts": [{"PartNumber": <number_of_part_1>, "ETag": "<etag_of_part_1>"}, {"PartNumber": <number_of_part_2>, "ETag": "<etag_of_part_2>"}, ..., {"PartNumber": <number_of_part_n>, "ETag": "<etag_of_part_n>"}]}'

    Где:

    • <bucket_name> — название бакета.

    • <object_key> — ключ объекта, под которым он будет храниться в бакете.

    • <upload_id> — значение поля UploadId, полученное на шаге 1.

    • multipart-upload — объект с порядковыми номерами и ETag всех частей файла в нужном порядке. Пример:

      '{"Parts": [{"PartNumber": 1, "ETag": "500def58592d4535345ce5d********"}, {"PartNumber": 2, "ETag": "ff9c93f9c1b08f65de594eca********"}]}'

    Результат:

    {
    "Location": "",
    "Bucket": "my-cool-bucket",
    "Key": "program.exe",
    "ETag": "8c40927e665281099f9917a3********-7"
    }

Объект собран и доступен в бакете на вкладке Файловый менеджер.