Облачная платформаEvolution

Создать мультикомпонентную (multipart) загрузку

Эта статья полезна?

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

Примечание

Создавать мультикомпонентные загрузки могут пользователи с ролями s3e.admin и s3e.editor. Подробнее о ролях — в руководстве Управление ролями в Object Storage.

При загрузке объекта через личный кабинет мультикомпонентная загрузка начинается автоматически для файлов больше 20 МБ. Личный кабинет позволяет просматривать список мультикомпонентных загрузок и отменять мультикомпонентную загрузку. Чтобы инициировать мультикомпонентную загрузку самостоятельно, управлять размером частей объекта и возобновлять загрузку в случае сбоя, используйте API, AWS CLI и другие инструменты для работы с Object Storage.

Внимание

Хранение частично загруженных объектов тарифицируется стандартным образом. Чтобы не платить за объекты, которые не загрузились полностью, отмените их загрузку.

Инструкция ниже описывает создание мультикомпонентной загрузки в Object Storage через AWS CLI и API.

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

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

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

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

    Где:

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

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

    • <file_name_prefix> — префикс, который будет присвоен частям файла, например 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"
    }

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