Complete Multipart Upload

Описание

Операция завершает многокомпонентную загрузку путем объединения ранее загруженных частей.

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

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

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

Запросы

Синтаксис

 POST /ObjectName?uploadId=UploadId HTTP/1.1
 Host: example-bucket.hb.bizmrg.com (example-bucket.ib.bizmrg.com) 
 Date: Date
 Content-Length: Size
 Authorization: authorization string 
<CompleteMultipartUpload>
  <Part>
    <PartNumber>PartNumber</PartNumber>
    <ETag>ETag</ETag>
  </Part>
  ...
</CompleteMultipartUpload>

Параметры запроса

Эта операция не использует параметры запроса.

Элементы запроса

Имя
Описание
Обязательно
CompleteMultipartUpload

Контейнер для ответа.

  • Предок: нет значения
  • Тип: Container
  • Дочерние элементы: один или несколько элементов частей Part


Да
Part

Контейнер для элементов, относящихся к отдельно взятой ранее загруженной части.

  • Предок: CompleteMultipartUpload
  • Тип: Container
  • Дочерние элементы: PartNumber, ETag


Да
PartNumber

Номер части, определяющий саму часть.

  • Предок: Part
  • Тип: Integer
Да
ETag

Тег сущности, возвращаемый при загрузке части.

  • Предок: Part
  • Тип: String
Да

Ответы

Заголовки ответа

Данная операция использует следующий заголовок ответа в дополнение к заголовкам ответа, свойственным большинству запросов. 


Заголовок
Описание
x-amz-expiration

Сервис возвращает данный заголовок, если истечение срока Expiration настроено для объекта как часть конфигурации жизненного цикла бакета. Значение заголовка включает в себя компонент «expiry-date» и закодированный с помощью URL компонент «rule-id». Необходимо отметить, что для бакетов с контролем версий, данный заголовок применим только к текущим версиям — сервис не предоставляет заголовок для определения возможности перманентного удаления другой версии. 

  • Тип: String
x-amz-server-side?-encryption

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

  • Тип: String
x-amz-server-side-encryption-aws-kms-key-id

Если элемент x-amz-server-side-encryption присутствует и при этом его значение равно значению aws:kmz, то данный заголовок указывает идентификатор главного ключа шифрования службы управления ключами, использованного для объекта.

  • Тип: String
x-amz-server-side?-encryption?-customer-algorithm

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

  • Тип: String
  • Допустимое значение: AES256
x-amz-version-id

Идентификатор версии созданного объекта при наличии контроля версии на бакете.

  • Тип: String

Элементы ответов

Имя
Описание
CompleteMultipartUploadResult

Контейнер для ответа


  • Тип: Container
  • Дочерние элементы: Location, Bucket, Key, ETag
  • Предки: нет


Location

URI, определяющий созданный объект.

  • Тип: URI
  • Предки: CompleteMultipartUploadResult
Bucket

Имя бакета, содержащего созданный объект.

  • Тип: String
  • Предки: CompleteMultipartUploadResult
Key

Ключ созданного объекта.

  • Тип: String
  • Предки: CompleteMultipartUploadResult
ETag

Тег сущности, определяющий данные созданного объекта. Объекты с различными данными объекта будут иметь различные теги сущности. Тег сущности является непрозрачным строковым типом. Тег сущности может являться или не являться MD5-сверткой данных объекта. Если тег сущности не является MD5-сверткой данных объекта, то он будет содержать один или несколько нешестнадцатеричных символов и/или будет состоять из менее или более чем 32 шестнадцатиричных символов.

  • Тип: String
  • Предки: CompleteMultipartUploadResult

Особые ошибки

Код ошибки
Описание
Код состояния HTTP
EntityTooSmall
Предложенная вами загрузка меньше минимального допустимого размера объекта. Размер каждой части, кроме последней, должен составлять как минимум 5 МБ.
400 Bad Request
InvalidPart
Одна или несколько из указанных частей не могут быть найдены. Возможно, что часть уже загружена или указанный тег сущности не совпал с тегом сущности этой части.
400 Bad Request
InvalidPartOrder
Части расположены в перечне не в порядке возрастания. Части должны быть указаны в порядке возрастания номеров.
400 Bad Request
NoSuchUpload
Указанная многокомпонентная загрузка не существует. Возможно, идентификатор загрузки неверен, или многокомпонентная загрузка была прервана или завершена.
400 Bad Request

Примеры

Пример 1

Запрос

Следующий запрос на завершение многокомпонентной загрузки определяет три части в элементе CompleteMultipartUpload.

 POST /example-object?uploadId=AAAsb2FkIElEIGZvciBlbHZpbmcncyWeeS1tb3ZpZS5tMnRzIRRwbG9hZA HTTP/1.1
 Host: example-bucket.hb.bizmrg.com (example-bucket.ib.bizmrg.com) 
 Date: Mon, 1 Nov 2010 20:34:56 GMT
 Content-Length: 391
 Authorization: authorization string 
<CompleteMultipartUpload>
  <Part>
    <PartNumber>1</PartNumber>
    <ETag>"a54357aff0632cce46d942af68356b38"</ETag>
  </Part>
  <Part>
    <PartNumber>2</PartNumber>
    <ETag>"0c78aef83f66abc1fa1e8477f296d394"</ETag>
  </Part>
  <Part>
    <PartNumber>3</PartNumber>
    <ETag>"acbd18db4cc2f85cedef654fccc4a4d8"</ETag>
  </Part>
</CompleteMultipartUpload>

Ответ

 HTTP/1.1 200 OK
 x-amz-id-2: Uuag1LuByRx9e6j5Onimru9pO4ZVKnJ2Qz7/C1NPcfTWAtRPfTaOFg==
 x-amz-request-id: 656c76696e6727732072657175657374
 Date: Mon, 1 Nov 2010 20:34:56 GMT
 Connection: close
 Server: HbBizmrg
<?xml version="1.0" encoding="UTF-8"?>
<CompleteMultipartUploadResult xmlns="http://hb.bizmrg.com/doc/2006-03-01/">
  <Location>http://Example-Bucket.hb.bizmrg.com/Example-Object</Location>
  <Bucket>Example-Bucket</Bucket>
  <Key>Example-Object</Key>
  <ETag>"3858f62230ac3c915f300c664312c11f-9"</ETag>
</CompleteMultipartUploadResult>

Пример 2. Ответ с указанной в заголовке ошибкой

Следующий ответ указывает на то, что перед отправкой заголовка HTTP-ответа возникла ошибка.

 HTTP/1.1 403 Forbidden
 x-amz-id-2: Uuag1LuByRx9e6j5Onimru9pO4ZVKnJ2Qz7/C1NPcfTWAtRPfTaOFg==
 x-amz-request-id: 656c76696e6727732072657175657374
 Date: Mon, 1 Nov 2010 20:34:56 GMT
 Content-Length: 237 
 Connection: keep-alive
 Server: HbBizmrg
<?xml version="1.0" encoding="UTF-8"?>
<Error>
  <Code>AccessDenied</Code>
  <Message>Access Denied</Message>
  <RequestId>656c76696e6727732072657175657374</RequestId>
  <HostId>Uuag1LuByRx9e6j5Onimru9pO4ZVKnJ2Qz7/C1NPcfTWAtRPfTaOFg==</HostId>
</Error>

Пример 3. Ответ с указанной в теле ошибкой

Следующий ответ указывает на то, что после отправки заголовка HTTP-ответа возникла ошибка. Необходимо отметить, что в то время, как кодом состояния HTTP являлось значение «200 OK», в действительности в запросе возникла ошибка, описанная в элементе Error.

 HTTP/1.1 200 OK
 x-amz-id-2: Uuag1LuByRx9e6j5Onimru9pO4ZVKnJ2Qz7/C1NPcfTWAtRPfTaOFg==
 x-amz-request-id: 656c76696e6727732072657175657374
 Date: Mon, 1 Nov 2010 20:34:56 GMT
 Connection: close
 Server: HbBizmrg
<?xml version="1.0" encoding="UTF-8"?>
<Error>
  <Code>InternalError</Code>
  <Message>We encountered an internal error. Please try again.</Message>
  <RequestId>656c76696e6727732072657175657374</RequestId>
  <HostId>Uuag1LuByRx9e6j5Onimru9pO4ZVKnJ2Qz7/C1NPcfTWAtRPfTaOFg==</HostId>
</Error>