CompleteMultipartUpload
在将所有数据Part都上传完成后,必须调用CompleteMultipartUpload API来完成整个文件的Multipart Upload。在执行该操作时,用户必须提供所有有效的数据Part的列表(包括part号码和ETAG);COS收到用户提交的Part列表后,会逐一验证每个数据Part的有效性。当所有的数据Part验证通过后,COS将把这些数据part组合成一个完整的Object。
请求语法
POST /ObjectName?uploadId=UploadId HTTP/1.1
Host: bucketname.cos.chinac.com
Date: GMT Date
Content-Length: Size
Authorization: Signature
{
"Parts":[
{
"PartNumber": 1,
"ETag":"ETag"
},
{
"PartNumber": 2,
"ETag":"ETag"
},
....
]
}
请求元素
Name | Type | Description |
---|---|---|
Parts | Object | 保存已经上传Part信息的容器 |
PartNumber | int | Part编号 |
ETag | String | Part成功上传后,COS返回的ETag值 |
响应元素
Name | Type | Description |
---|---|---|
Bucket | String | Bucket名称 |
Location | String | 新创建Object的数据中心 |
Key | String | 新创建Object的名字 |
ETag | String | 用于标示一个Object的内容 |
细节分析
- Complete Multipart Upload时,会确认除最后一块以外所有块的大小都大于5MB,并检查用户提交的Partlist中的每一个Part号码和Etag。所以在上传Part时,客户端除了需要记录Part号码外,还需要记录每次上传Part成功后,服务器返回的ETag值
- COS处理Complete Multipart Upload请求时,会持续一定的时间。在这段时间内,如果客户端和COS之间的链接断掉,COS仍会继续将请求做完
- 用户提交的Part List中,Part号码可以是不连续的。例如第一块的Part号码是1;第二块的Part号码是5
- COS处理Complete Multipart Upload请求成功后,该UploadID就会变成无效
- 同一个Object可以同时拥有不同的UploadId,当Complete一个UploadID后,该Object的其他UploadID不受影响
- 如果用户上传了Content-MD5请求头,COS会计算body的Content-MD5并检查一致性,如果不一致,将返回InvalidDigest错误码
示例
请求示例
POST /multipart.data? uploadId=0004B9B2D2F7815C432C9057C03134D4 HTTP/1.1
Host: test-bucket.cos.chinac.com
Content-Length: 1056
Date: Fri, 24 Feb 2012 10:19:18 GMT
Authorization: COS qn6qrrqxo2oawuk53otfjbyc:8VwFhFUWmVecK6jQlHlXMK/zMT0=
{
"Parts":[
{
"PartNumber": 1,
"ETag":"dcfbec872939710ea5dd0df82ed27789"
},
{
"PartNumber": 2,
"ETag":"71cb71a054447b28e0702f4c22fa938d"
}
]
}
返回示例
HTTP/1.1 200 OK
Content-Type: Application/json
Content-Length: 329
Connection: keep-alive
x-cos-request-id: 594f0751-3b1e-168f-4501-4ac71d217d6e
Date: Fri, 24 Feb 2012 10:19:18 GMT
Server: COS
{
"Location": "test-bucket.cos.chinac.com/multipart.data",
"Bucket": "test-bucket",
"Key": "multipart.data",
"ETag": "B864DB6A936D376F9F8D3ED3BBE540DD-3"
}