CompleteMultipartUpload
Completes a multipart upload by assembling previously uploaded parts.
You first initiate the multipart upload and then upload all parts using the UploadPartoperation or the UploadPartCopyoperation. After successfully uploading all relevant parts of an upload, you call this CompleteMultipartUpload
operation to complete the upload. Upon receiving this request, Astran S3 concatenates all the parts in ascending order by part number to create a new object. In the CompleteMultipartUpload request, you must provide the parts list and ensure that the parts list is complete. The CompleteMultipartUpload API operation concatenates the parts that you provide in the list. For each part in the list, you must provide the PartNumber
value and the ETag
value that are returned after that part was uploaded.
The processing of a CompleteMultipartUpload request could take several minutes to finalize. After Astran S3 begins processing the request, it sends an HTTP response header that specifies a 200 OK
response. While processing is in progress, Astran S3 periodically sends white space characters to keep the connection from timing out. A request could fail after the initial 200 OK
response has been sent. This means that a 200 OK
response can contain either a success or an error. The error response might be embedded in the 200 OK
response. If you call this API operation directly, make sure to design your application to parse the contents of the response and handle it appropriately. If you use AWS SDKs, SDKs handle this condition. The SDKs detect the embedded error and apply error handling per your configuration settings (including automatically retrying the request as appropriate). If the condition persists, the SDKs throw an exception (or, for the SDKs that don't use exceptions, they return an error).
Note that if CompleteMultipartUpload
fails, applications should be prepared to retry any failed requests (including 500 error responses). For more information, see Astran S3 Error Best Practices.
You can't use Content-Type: application/x-www-form-urlencoded
for the CompleteMultipartUpload requests. Also, if you don't provide a Content-Type
header, CompleteMultipartUpload
can still return a 200 OK
response.
For more information about multipart uploads, see Uploading Objects Using Multipart Upload in the Amazon S3 User Guide.
Permissions
Action | Description | Resource |
---|---|---|
PutObject | Grants permission to add an object to a bucket | object |
Special errors
- Error Code:
EntityTooSmall
- Description: Your proposed upload is smaller than the minimum allowed object size. Each part must be at least 5 MB in size, except the last part.
- HTTP Status Code: 400 Bad Request
- Error Code:
InvalidPart
- Description: One or more of the specified parts could not be found. The part might not have been uploaded, or the specified ETag might not have matched the uploaded part's ETag.
- HTTP Status Code: 400 Bad Request
- Error Code:
InvalidPartOrder
- Description: The list of parts was not in ascending order. The parts list must be specified in order by part number.
- HTTP Status Code: 400 Bad Request
- Error Code:
NoSuchUpload
- Description: The specified multipart upload does not exist. The upload ID might be invalid, or the multipart upload might have been aborted or completed.
- HTTP Status Code: 404 Not Found
The following operations are related to CompleteMultipartUpload
:
Request Syntax
POST /Bucket/Key+?uploadId=UploadId HTTP/1.1
Host: <partition>.s3.astran.io
<?xml version="1.0" encoding="UTF-8"?>
<CompleteMultipartUpload xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Part>
<ETag>string</ETag>
<PartNumber>integer</PartNumber>
</Part>
...
</CompleteMultipartUpload>
URI Request Parameters
The request uses the following URI parameters.
Name of the bucket to which the multipart upload was initiated.
Required: Yes
Object key for which the multipart upload was initiated.
Length Constraints: Minimum length of 1.
Required: Yes
ID for the initiated multipart upload.
Required: Yes
Request Body
The request accepts the following data in XML format.
Root level tag for the CompleteMultipartUpload parameters.
Required: Yes
Array of CompletedPart data types.
If you do not supply a valid Part
with your request, the service sends back an HTTP 400 response.
Type: Array of CompletedPart data types
Required: Yes
Response Syntax
HTTP/1.1 200
<?xml version="1.0" encoding="UTF-8"?>
<CompleteMultipartUploadResult>
<Location>string</Location>
<Bucket>string</Bucket>
<Key>string</Key>
<ETag>string</ETag>
</CompleteMultipartUploadResult>
Response Elements
If the action is successful, the service sends back an HTTP 200 response.
The following data is returned in XML format by the service.
Root level tag for the CompleteMultipartUploadResult parameters.
Required: Yes
The name of the bucket that contains the newly created object.
Type: String
Entity tag that identifies the newly created object's data. Objects with different object data will have different entity tags. The entity tag is an opaque string. The entity tag may or may not be an MD5 digest of the object data. If the entity tag is not an MD5 digest of the object data, it will contain one or more nonhexadecimal characters and/or will consist of less than 32 or more than 32 hexadecimal digits. For more information about how the entity tag is calculated, see Checking object integrity in the Amazon S3 User Guide.
Type: String
The object key of the newly created object.
Type: String
Length Constraints: Minimum length of 1.
The URI that identifies the newly created object.
Type: String
Examples
The following Complete Multipart Upload request specifies three parts in the CompleteMultipartUpload
element.
POST /example-bucket/example-object?uploadId=AAAsb2FkIElEIGZvciBlbHZpbmcncyWeeS1tb3ZpZS5tMnRzIRRwbG9hZA HTTP/1.1
Host: <partition>.s3.astran.io
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>
The following response indicates that an object was successfully assembled.
HTTP/1.1 200 OK
x-request-id: 656c76696e6727732072657175657374
Date: Mon, 1 Nov 2010 20:34:56 GMT
<?xml version="1.0" encoding="UTF-8"?>
<CompleteMultipartUploadResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Location>http://<partition>.s3.astran.io/Example-Bucket/Example-Object</Location>
<Bucket>Example-Bucket</Bucket>
<Key>Example-Object</Key>
<ETag>"3858f62230ac3c915f300c664312c11f-9"</ETag>
</CompleteMultipartUploadResult>
The following response indicates that an error occurred before the HTTP response header was sent.
HTTP/1.1 403 Forbidden
x-request-id: 656c76696e6727732072657175657374
Date: Mon, 1 Nov 2010 20:34:56 GMT
Content-Length: 237
<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>656c76696e6727732072657175657374</RequestId>
</Error>
The following response indicates that an error occurred after the HTTP response header was sent. Note that while the HTTP status code is 200 OK, the request actually failed as described in the Error
element.
HTTP/1.1 200 OK
x-request-id: 656c76696e6727732072657175657374
Date: Mon, 1 Nov 2010 20:34:56 GMT
<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>InternalError</Code>
<Message>We encountered an internal error. Please try again.</Message>
<RequestId>656c76696e6727732072657175657374</RequestId>
</Error>
See Also
For more information about using this API in one of the language-specific AWS SDKs, see the following: