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

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

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

Запрос:

1POST /multipart-file.tar.gz?uploads HTTP/1.1
2Host: my-test-bucket1.hb.vkcs.cloud
3x-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
4x-amz-date:20200831T174652Z
5Authorization: AWS4-HMAC-SHA256 Credential=II5JDQBAN3JYM4DNEB6C/20200831/ru-msk/s3/aws4_request,SignedHeaders=host;x-amz-content-sha256;x-amz-date,Signature=e356966fff5a3d49d19c0e44e0fdba294964384a58061d3e60dfd1a4a5b605ad

Ответ:

1HTTP/1.1 200 OK
2Content-Length: 286
3Content-Type: application/xml
4Date: Mon, 31 Aug 2020 17:46:53 GMT
5x-amz-request-id: tx00000000000000ab66a13-005991e20d-66a8-ru-mska
6Connection: close
7
8<?xml version="1.0" encoding="UTF-8"?>
9  <InitiateMultipartUploadResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
10    <Bucket>static-images</Bucket>
11    <Key>multipart-file.tar.gz</Key>
12    <UploadId>2~iCw_lDY8VoBhoRrIJbPMrUqnE3Z-3Qh</UploadId>
13  </InitiateMultipartUploadResult>

Upload Part

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

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

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

Запрос:

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

Ответ:

1HTTP/1.1 200 OK
2Content-Length: 0
3Content-Type: application/xml
4Date: Mon, 31 Aug 2020 18:45:01 GMT
5Etag: "d8d3ed3a4de016917a814a2cf5acad3c"
6x-amz-request-id: tx00000000000000ab85dab-005991efac-66a8-ru-mska
7Connection: close

Complete Multipart Upload

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

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

Запрос:

1POST /multipart-file.tar.gz?uploadId=2~iCw_lDY8VoBhoRrIJbPMrUqnE3Z-3Qh HTTP/1.1
2Host: my-test-bucket1.hb.vkcs.cloud
3Content-Length: 358
4x-amz-content-sha256: 6ab0931e613fd0cd39af0fa4733edb6ad942df0ad33e057713d44df7195b6ecf
5x-amz-date: 20200831T184459Z
6Authorization: AWS4-HMAC-SHA256 Credential=II5JDQBAN3JYM4DNEB6C/20200831/ru-msk/s3/aws4_request,SignedHeaders=host;x-amz-content-sha256;x-amz-date,Signature=2e4adca0a3164af8717f340ca874b4f3036dd0294b590a70f2147427221ca1e8
7
8<CompleteMultipartUpload>
9  <Part>
10    <PartNumber>1</PartNumber>
11    <ETag>"d8d3ed3a4de016917a814a2cf5acad3c"</ETag>
12  </Part>
13  <Part>
14    <PartNumber>2</PartNumber>
15    <ETag>"adf5feafc0fe4632008d5cb30beb1c49"</ETag>
16  </Part>
17  <Part>
18    <PartNumber>3</PartNumber>
19    <ETag>"363f6bb50866541d78e5f6f626592263"</ETag>
20  </Part>
21</CompleteMultipartUpload>

Ответ:

1HTTP/1.1 200 OK
2Content-Length: 336
3Content-Type: application/xml
4Date: Mon, 31 Aug 2020 18:45:01 GMT
5x-amz-request-id: tx00000000000000ab962c8-005991f6fe-66a8-ru-mska
6Connection: close
7
8<?xml version="1.0" encoding="UTF-8"?>
9  <CompleteMultipartUploadResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
10    <Location>my-test-bucket1.hb.vkcs.cloud</Location>
11    <Bucket>my-test-bucket1</Bucket>
12    <Key>multipart-file.tar.gz</Key>
13    <ETag>f935869350d7cbfcdd219df3f377531b-3</ETag>
14  </CompleteMultipartUploadResult>

Abort Multipart Upload

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

Запрос:

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

Ответ:

1HTTP/1.1 200 OK
2Date: Mon, 31 Aug 2020 18:45:01 GMT
3x-amz-request-id: tx00000000000000abbaefe-0059920764-66a8-ru-mska
4Connection: close

List Parts

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

Запрос:

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

Ответ:

1HTTP/1.1 200 OK
2Content-Length: 980
3Content-Type: application/xml
4Date: Mon, 31 Aug 2020 18:45:01 GMT
5Etag: "d8d3ed3a4de016917a814a2cf5acad3c"
6x-amz-request-id: tx00000000000000ab85dab-005991efac-66a8-ru-mska
7Connection: close
8
9<?xml version="1.0" encoding="UTF-8"?>
10  <ListPartsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
11    <Bucket>my-test-bucket1</Bucket>
12    <Key>multipart-file.tar.gz</Key>
13    <UploadId>2~iCw_lDY8VoBhoRrIJbPMrUqnE3Z-3Qh</UploadId>
14    <StorageClass>STANDARD</StorageClass>
15    <PartNumberMarker>0</PartNumberMarker>
16    <NextPartNumberMarker>1</NextPartNumberMarker>
17    <MaxParts>1000</MaxParts>
18    <IsTruncated>false</IsTruncated>
19    <Owner>
20      <ID>eab55955-ebdb-4f18-a94d-f3558ff150da</ID>
21      <DisplayName>VK Cloud_UserName</DisplayName>
22    </Owner>
23    <Part>
24      <LastModified>2017-08-14T18:45:01.601Z</LastModified>
25      <PartNumber>1</PartNumber>
26      <ETag>"d8d3ed3a4de016917a814a2cf5acad3c"</ETag>
27      <Size>5242880</Size>
28    </Part>
29    <Part>
30      <LastModified>2017-08-14T18:45:01.601Z</LastModified>
31      <PartNumber>2</PartNumber>
32      <ETag>"adf5feafc0fe4632008d5cb30beb1c49"</ETag>
33      <Size>5242880</Size>
34    </Part>
35  </ListPartsResult>