Multipart
Составная или многокомпонентная загрузка позволяет сохранять объекты в Объектном хранилище VK Cloud S3 по частям. Это может пригодиться при загрузке или копировании больших объектов. Рекомендуем использовать составную загрузку для объектов от 100 МБ.
Составная загрузка состоит из следующих шагов:
- Initiate Multipart Upload — инициализация загрузки.
- Upload Part — загрузка объекта по частям.
- Complete Multipart Upload — завершение загрузки путем объединения ранее загруженных частей.
- Abort Multipart Upload — прерывание загрузки
- List Parts — возврат списка загруженных частей.
Операция инициализирует многокомпонентную загрузку и возвращает идентификатор загрузки. Идентификатор загрузки используется для объединения всех частей одной многокомпонентной загрузки. Необходимо указывать этот идентификатор загрузки в каждом из последующих запросов на загрузку части.
Если настроено правило жизненного цикла на прерывание неоконченных многокомпонентных загрузок, то загрузка должна завершиться в течение количества дней, указанном в конфигурации жизненного цикла бакета. В противном случае для незавершенной многокомпонентной загрузки становится доступной операция прерывания, и сервис прерывает многокомпонентную загрузку.
Запрос:
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>
Операция загружает часть многокомпонентной загрузки. Для выполнения этой операции необходимо предоставить данные из части в запросе. Для загрузки части из существующего объекта используется операция загрузки части (копии).
Часть может иметь любой номер от 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
Операция завершает многокомпонентную загрузку путем объединения ранее загруженных частей. После получения данного запроса 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>
Операция прерывает многокомпонентную загрузку. После прерывания многокомпонентной загрузки невозможно загрузить дополнительные части, используя идентификатор загрузки прерванной многокомпонентной загрузки. Место, выделенное для хранения ранее загруженных частей, будет освобождено. При этом если происходит загрузка каких-либо частей, то такая операция может завершиться или прерваться. В результате этого может появиться необходимость многократного прерывания многокомпонентной загрузки для полного высвобождения пространства, занимаемого всеми частями.
Запрос:
DELETE /multipart-file.tar.gz?uploadId=2~iCw_lDY8VoBhoRrIJbPMrUqnE3Z-3Qh HTTP/1.1
Host: my-test-bucket1.hb.vkcs.cloud
Content-Length: 5242880
x-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
x-amz-date:20200831T202611Z
Authorization: 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
Операция возвращает список частей, загруженных по определенной многокомпонентной загрузке. Операция должна включать в себя идентификатор загрузки, который получен после отправки запроса на инициализацию многокомпонентной загрузки. Такой запрос возвращает не более 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.1
PUT /multipart-file.tar.gz?partNumber=1&uploadId=2~iCw_lDY8VoBhoRrIJbPMrUqnE3Z-3Qh HTTP/1.1
Host: my-test-bucket1.hb.vkcs.cloud
Content-Length: 5242880
x-amz-content-sha256: 6ab0931e613fd0cd39af0fa4733edb6ad942df0ad33e057713d44df7195b6ecf
x-amz-date: 20200831T184459Z
Authorization: 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>