After uploading all parts for a multipart upload, you can use this operation to complete the multipart upload.
Upon receiving a Complete Multipart Upload request, OBS concatenates the specified parts to create a new object. All associated parts cannot be downloaded until the multipart upload is complete.
When starting to complete a multipart upload, OBS first copies the header information from the metadata of associated parts and then incorporates the header information into the metadata of the newly created object.
Before a multipart upload is completed, all associated parts occupy storage quota. After the multipart upload is completed, only parts included in the part list specified in the Complete Multipart Upload request are concatenated. These parts still occupy storage quota while other parts are deleted to release storage quota.
After a multipart upload is completed, you can send a GET request to obtain the newly created object or some parts comprising this object by specifying a range in the request. You can also send a DELETE request to delete all parts uploaded for the multipart upload. The deleted parts cannot be restored.
The MD5 value recorded in the ETag of a newly created object is calculated using the MD5 values of the parts comprising this object. The object ETag is calculated as follows:
MD5(M1M2......MN)-N
where
Mn is the MD5 value of part N
N is the total number of parts
If a bucket has versioning enabled, a unique version ID is generated for an object created from a multipart upload in this bucket and the version ID is returned in response header x-amz-version-id. If the bucket has versioning suspended, the version ID of the object is null. For details about bucket versioning, see section PUT Bucket versioning.
If 10 parts are uploaded but only 9 parts are selected for combination, the part that is not combined will be automatically deleted. After the part is deleted, it cannot be restored. Before combining the parts, adopt the interface used to list the parts that have been uploaded to check all parts to ensure that no part is missed.
POST /ObjectName?uploadId=uploadID HTTP/1.1 User-Agent: agent Host: bucketname.obs.example.com Accept: */* Date: date Content-Length: length Authorization: auth Expect: expect <CompleteMultipartUpload> <Part> <PartNumber>partNum1</PartNumber> <ETag>etag1</ETag> </Part> <Part> <PartNumber>partNum2</PartNumber> <ETag>etag2</ETag> </Part> <Part> <PartNumber>partNum3</PartNumber> <ETag>etag3</ETag> </Part> </CompleteMultipartUpload>
This request uses one parameter to specify the ID of the multipart upload to be completed. Table 1 describes the parameter.
This request uses common headers. For details about common request headers, see section Common Request Headers.
This request contains elements to specify the part list for the multipart upload to be completed. Table 2 describes the elements.
Element |
Description |
Remarks |
---|---|---|
CompleteMultipartUpload |
Indicates the container for the list of parts to be concatenated. Type: XML |
Mandatory |
PartNumber |
Indicates the number that identifies a part. Type: Integer |
Mandatory |
ETag |
Indicates the ETag returned after a part is uploaded. Type: String |
Mandatory |
HTTP/1.1 status_code x-amz-id-2: id x-amz-request-id: request id x-reserved: amazon, aws and amazon web services are trademarks or registered trademarks of Amazon Technologies, Inc x-reserved-indicator: indicator Content-Type: type Date: date Connection: state Server: server <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <CompleteMultipartUploadResult xmlns="http://obs.example.com/doc/2015-06-30/"> <Location>http://example-Bucket.obs.example.com/example-Object</Location> <Bucket>BucketName</Bucket> <Key>ObjectName</Key> <ETag>ETag</ETag> </CompleteMultipartUploadResult>
This response uses common headers. For details about common response headers, see section Common Response Headers.
This response also uses one optional header, as described in Table 3.
Header |
Description |
---|---|
x-amz-version-id |
Indicates the version ID of the object created from a multipart upload. Type: String |
x-amz-server-side-encryption |
This header is included in a response if SSE-KMS is used. Type: string Example: x-amz-server-side-encryption:aws:kms |
x-amz-server-side-encryption-aws-kms-key-id |
Indicates the master key ID. This header is included in a response if SSE-KMS is used. Example: x-amz-server-side-encryption-aws-kms-key-id:arn:aws:kms:sichuan:domainiddomainiddomainiddoma0001:key/4f1cd4de-ab64-4807-920a-47fc42e7f0d0 |
x-amz-server-side-encryption-customer-algorithm |
Indicates an encryption algorithm. This header is included in a response if SSE-C is used. Type: string Example: x-amz-server-side-encryption-customer-algorithm:AES256 |
This response contains elements to indicate the results of completing a multipart upload. Table 4 describes the elements.
Element |
Description |
---|---|
Location |
Indicates the URL of the newly created object. Type: String |
Bucket |
Indicates the bucket that contains the newly created object. Type: String |
Key |
Indicates the key of the newly created object. Type: String |
ETag |
Indicates the ETag that identifies the metadata of the newly created object. This ETag is calculated using the MD5 values of parts comprising the newly created object. Type: String |
For details about other error responses, see Table 1.
POST /example-object?uploadId=AAAsb2FkIElEIGZvciBlbHZpbmcncyWeeS1tb3ZpZS5tMnRzIRRwbG9hZA HTTP/1.1 User-Agent: Jakarta Commons-HttpClient/3.1 Host: bucketname.obs.example.com Accept: */* Date: Mon, 1 Nov 2010 20:34:56 GMT Content-Length: 391 Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU= Expect: 100-continue <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 x-reserved: amazon, aws and amazon web services are trademarks or registered trademarks of Amazon Technologies, Inc x-reserved-indicator: 3 Content-Type: application/xml Date: Mon, 1 Nov 2010 20:34:56 GMT Connection: close Content-Length: 306 Server: OBS <?xml version="1.0" encoding="UTF-8"?> <CompleteMultipartUploadResult xmlns="http://obs.example.com/doc/2015-06-30/"> <Location>http://example-Bucket.obs.example.com/example-Object</Location> <Bucket>Example-Bucket</Bucket> <Key>Example-Object</Key> <ETag>"3858f62230ac3c915f300c664312c11f-9"</ETag> </CompleteMultipartUploadResult>
POST /object?uploadId=DCD2FC9CAB7800000143947AB58A5094 HTTP/1.1 User-Agent: Jakarta Commons-HttpClient/3.1 Host: bucketname.obs.example.com Accept: */* Date: Wed, 15 Jan 2014 06:09:39 +0000 Authorization: AWS C9590CEB8EC051BDEC9D:xQ9EFib6cohqMu2bLLJ0soseeUI= Content-Length: 155 Expect: 100-continue <CompleteMultipartUpload> <Part> <PartNumber>1</PartNumber> <ETag>"9fd2e548507ceef1a2183a8328b5cf2c"</ETag> </Part> </CompleteMultipartUpload>
HTTP/1.1 200 OK Server: OBS x-amz-request-id: DCD2FC9CAB78000001439484FB045617 x-amz-id-2: xw5X6Y7YIpWnQgHNYG3ce4+lj8O1GjiGvFXSgdPV1x2tYn2iZXFnTJm0yh5X5XnV x-reserved: amazon, aws and amazon web services are trademarks or registered trademarks of Amazon Technologies, Inc x-reserved-indicator: 3 Content-Type: application/xml x-amz-version-id: AAABQ5R6tZ7c0vycq3gAAAAbVURTRkha Date: Wed, 15 Jan 2014 06:09:39 GMT Content-Length: 300 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <CompleteMultipartUploadResult xmlns="http://obs.example.com/doc/2015-06-30/"> <Location>/example/multi</Location> <Bucket>example</Bucket> <Key>multi</Key> <ETag>"59297fcb0de64c706cbb46e382d9c625-1"</ETag> </CompleteMultipartUploadResult>