VK Cloud logo
Обновлена 27 марта 2024 г. в 14:33

Multipart

Составная или многокомпонентная загрузка позволяет сохранять объекты в Cloud Storage по частям. Это может пригодиться при загрузке или копировании больших объектов. Рекомендуем использовать составную загрузку для объектов от 100 МБ.

Составная загрузка состоит из следующих шагов:

  • Initiate Multipart Upload — инициализация загрузки.
  • Upload Part — загрузка объекта по частям.
  • Complete Multipart Upload — завершение загрузки путем объединения ранее загруженных частей.
  • Abort Multipart Upload — прерывание загрузки
  • List Parts — возврат списка загруженных частей.

Initiate Multipart Upload

Операция инициализирует многокомпонентную загрузку и возвращает идентификатор загрузки. Идентификатор загрузки используется для объединения всех частей одной многокомпонентной загрузки. Необходимо указывать этот идентификатор загрузки в каждом из последующих запросов на загрузку части.

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

Запрос:

POST /multipart-file.tar.gz?uploads HTTP/1.1Host: my-test-bucket1.hb.vkcs.cloudx-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855x-amz-date:20200831T174652ZAuthorization: AWS4-HMAC-SHA256 Credential=II5JDQBAN3JYM4DNEB6C/20200831/ru-msk/s3/aws4_request,SignedHeaders=host;x-amz-content-sha256;x-amz-date,Signature=e356966fff5a3d49d19c0e44e0fdba294964384a58061d3e60dfd1a4a5b605ad

Ответ:

HTTP/1.1 200 OKContent-Length: 286Content-Type: application/xmlDate: Mon, 31 Aug 2020 17:46:53 GMTx-amz-request-id: tx00000000000000ab66a13-005991e20d-66a8-ru-mskaConnection: close<?xml version="1.0" encoding="UTF-8"?>  <InitiateMultipartUploadResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">    <Bucket>static-images</Bucket>    <Key>multipart-file.tar.gz</Key>    <UploadId>2~iCw_lDY8VoBhoRrIJbPMrUqnE3Z-3Qh</UploadId>  </InitiateMultipartUploadResult>

Upload Part

Операция загружает часть многокомпонентной загрузки. Для выполнения этой операции необходимо предоставить данные из части в запросе. Для загрузки части из существующего объекта используется операция загрузки части (копии).

Часть может иметь любой номер от 1 до 10 000 включительно. Номер части однозначно определяет часть и ее положение в создаваемом объекте. Если загружается новую часть, с назначенным ей номером, используемым для одной из существующих частей, то существующая часть будет перезаписана. Размер каждой части, кроме последней, должен составлять как минимум 5 МБ. Последняя часть многокомпонентной загрузки не имеет ограничения по размеру.

Чтобы удостовериться в том, что данные не исказятся при их передаче по сети, следует указать заголовок Content-MD5 в запросе загрузки части. VK Cloud сверяет данные из частей с предоставленным значением MD5-хеша и при их несовпадении возвращает ошибку.

Запрос:

PUT /multipart-file.tar.gz?partNumber=1&uploadId=2~iCw_lDY8VoBhoRrIJbPMrUqnE3Z-3Qh HTTP/1.1Host: my-test-bucket1.hb.vkcs.cloudContent-Length: 5242880x-amz-content-sha256: 6ab0931e613fd0cd39af0fa4733edb6ad942df0ad33e057713d44df7195b6ecfx-amz-date: 20200831T184459ZAuthorization: AWS4-HMAC-SHA256 Credential=II5JDQBAN3JYM4DNEB6C/20200831/ru-msk/s3/aws4_request,SignedHeaders=host;x-amz-content-sha256;x-amz-date,Signature=2e4adca0a3164af8717f340ca874b4f3036dd0294b590a70f2147427221ca1e8

Ответ:

HTTP/1.1 200 OKContent-Length: 0Content-Type: application/xmlDate: Mon, 31 Aug 2020 18:45:01 GMTEtag: "d8d3ed3a4de016917a814a2cf5acad3c"x-amz-request-id: tx00000000000000ab85dab-005991efac-66a8-ru-mskaConnection: close

Complete Multipart Upload

Операция завершает многокомпонентную загрузку путем объединения ранее загруженных частей. После получения данного запроса VK Cloud объединяет все загруженные части в возрастающем порядке по номеру частей, создавая новый объект. В запросе на завершение многокомпонентной загрузки необходимо предоставить список частей. Для каждой части из списка следует предоставить номер части и значение заголовка ETag, возвращаемое после загрузки этой части.

Обработка запроса на завершение многокомпонентной загрузки может занять несколько минут. После начала обработки запроса, VK Cloud отправляет заголовок ответа HTTP, содержащий ответ «200 OK». Во время обработки запроса периодически отправляются пробельные символы для предотвращения превышения лимита времени ожидания. Так как ошибка может возникать в запросе после отправления первоначального ответа «200 OK», необходимо проверять тело ответа для определения успешности исполнения запроса.

Запрос:

POST /multipart-file.tar.gz?uploadId=2~iCw_lDY8VoBhoRrIJbPMrUqnE3Z-3Qh HTTP/1.1Host: my-test-bucket1.hb.vkcs.cloudContent-Length: 358x-amz-content-sha256: 6ab0931e613fd0cd39af0fa4733edb6ad942df0ad33e057713d44df7195b6ecfx-amz-date: 20200831T184459ZAuthorization: AWS4-HMAC-SHA256 Credential=II5JDQBAN3JYM4DNEB6C/20200831/ru-msk/s3/aws4_request,SignedHeaders=host;x-amz-content-sha256;x-amz-date,Signature=2e4adca0a3164af8717f340ca874b4f3036dd0294b590a70f2147427221ca1e8<CompleteMultipartUpload>  <Part>    <PartNumber>1</PartNumber>    <ETag>"d8d3ed3a4de016917a814a2cf5acad3c"</ETag>  </Part>  <Part>    <PartNumber>2</PartNumber>    <ETag>"adf5feafc0fe4632008d5cb30beb1c49"</ETag>  </Part>  <Part>    <PartNumber>3</PartNumber>    <ETag>"363f6bb50866541d78e5f6f626592263"</ETag>  </Part></CompleteMultipartUpload>

Ответ:

HTTP/1.1 200 OKContent-Length: 336Content-Type: application/xmlDate: Mon, 31 Aug 2020 18:45:01 GMTx-amz-request-id: tx00000000000000ab962c8-005991f6fe-66a8-ru-mskaConnection: close<?xml version="1.0" encoding="UTF-8"?>  <CompleteMultipartUploadResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">    <Location>my-test-bucket1.hb.vkcs.cloud</Location>    <Bucket>my-test-bucket1</Bucket>    <Key>multipart-file.tar.gz</Key>    <ETag>f935869350d7cbfcdd219df3f377531b-3</ETag>  </CompleteMultipartUploadResult>

Abort Multipart Upload

Операция прерывает многокомпонентную загрузку. После прерывания многокомпонентной загрузки невозможно загрузить дополнительные части, используя идентификатор загрузки прерванной многокомпонентной загрузки. Место, выделенное для хранения ранее загруженных частей, будет освобождено. При этом если происходит загрузка каких-либо частей, то такая операция может завершиться или прерваться. В результате этого может появиться необходимость многократного прерывания многокомпонентной загрузки для полного высвобождения пространства, занимаемого всеми частями.

Запрос:

DELETE /multipart-file.tar.gz?uploadId=2~iCw_lDY8VoBhoRrIJbPMrUqnE3Z-3Qh HTTP/1.1Host: my-test-bucket1.hb.vkcs.cloudContent-Length: 5242880x-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855x-amz-date:20200831T202611ZAuthorization: AWS4-HMAC-SHA256 Credential=II5JDQBAN3JYM4DNEB6C/20200831/ru-msk/s3/aws4_request,SignedHeaders=host;x-amz-content-sha256;x-amz-date,Signature=9e13d3f9e71ca5fb034fe66e92c60e30b3az3e177573702dd11d2b541358bf92

Ответ:

HTTP/1.1 200 OKDate: Mon, 31 Aug 2020 18:45:01 GMTx-amz-request-id: tx00000000000000abbaefe-0059920764-66a8-ru-mskaConnection: close

List Parts

Операция возвращает список частей, загруженных по определенной многокомпонентной загрузке. Операция должна включать в себя идентификатор загрузки, который получен после отправки запроса на инициализацию многокомпонентной загрузки. Такой запрос возвращает не более 1000 загруженных частей. Можно ограничить количество возвращаемых частей, указав параметр запроса max-parts. Если многокомпонентная загрузка состоит из более, чем 1000 частей, то ответ возвращает элемент NextPartNumberMarker и поле IsTruncated со значением true. В последующих запросах на просмотр списка частей можно включать параметр строки запроса part-number-marker, устанавливая для него значение поля NextPartNumberMarker из предыдущего ответа.

Запрос:

GET /?uploads&delimiter=Delimiter&encoding-type=EncodingType&key-marker=KeyMarker&max-uploads=MaxUploads&prefix=Prefix&upload-id-marker=UploadIdMarker HTTP/1.1PUT /multipart-file.tar.gz?partNumber=1&uploadId=2~iCw_lDY8VoBhoRrIJbPMrUqnE3Z-3Qh HTTP/1.1Host: my-test-bucket1.hb.vkcs.cloudContent-Length: 5242880x-amz-content-sha256: 6ab0931e613fd0cd39af0fa4733edb6ad942df0ad33e057713d44df7195b6ecfx-amz-date: 20200831T184459ZAuthorization: AWS4-HMAC-SHA256 Credential=II5JDQBAN3JYM4DNEB6C/20200831/ru-msk/s3/aws4_request,SignedHeaders=host;x-amz-content-sha256;x-amz-date,Signature=2e4adca0a3164af8717f340ca874b4f3036dd0294b590a70f2147427221ca1e8

Ответ:

HTTP/1.1 200 OKContent-Length: 980Content-Type: application/xmlDate: Mon, 31 Aug 2020 18:45:01 GMTEtag: "d8d3ed3a4de016917a814a2cf5acad3c"x-amz-request-id: tx00000000000000ab85dab-005991efac-66a8-ru-mskaConnection: close<?xml version="1.0" encoding="UTF-8"?>  <ListPartsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">    <Bucket>my-test-bucket1</Bucket>    <Key>multipart-file.tar.gz</Key>    <UploadId>2~iCw_lDY8VoBhoRrIJbPMrUqnE3Z-3Qh</UploadId>    <StorageClass>STANDARD</StorageClass>    <PartNumberMarker>0</PartNumberMarker>    <NextPartNumberMarker>1</NextPartNumberMarker>    <MaxParts>1000</MaxParts>    <IsTruncated>false</IsTruncated>    <Owner>      <ID>eab55955-ebdb-4f18-a94d-f3558ff150da</ID>      <DisplayName>VK Cloud_UserName</DisplayName>    </Owner>    <Part>      <LastModified>2017-08-14T18:45:01.601Z</LastModified>      <PartNumber>1</PartNumber>      <ETag>"d8d3ed3a4de016917a814a2cf5acad3c"</ETag>      <Size>5242880</Size>    </Part>    <Part>      <LastModified>2017-08-14T18:45:01.601Z</LastModified>      <PartNumber>2</PartNumber>      <ETag>"adf5feafc0fe4632008d5cb30beb1c49"</ETag>      <Size>5242880</Size>    </Part>  </ListPartsResult>