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的内容

细节分析

  1. Complete Multipart Upload时,会确认除最后一块以外所有块的大小都大于5MB,并检查用户提交的Partlist中的每一个Part号码和Etag。所以在上传Part时,客户端除了需要记录Part号码外,还需要记录每次上传Part成功后,服务器返回的ETag值
  2. COS处理Complete Multipart Upload请求时,会持续一定的时间。在这段时间内,如果客户端和COS之间的链接断掉,COS仍会继续将请求做完
  3. 用户提交的Part List中,Part号码可以是不连续的。例如第一块的Part号码是1;第二块的Part号码是5
  4. COS处理Complete Multipart Upload请求成功后,该UploadID就会变成无效
  5. 同一个Object可以同时拥有不同的UploadId,当Complete一个UploadID后,该Object的其他UploadID不受影响
  6. 如果用户上传了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: ChinacCOS

{
    "Location": "test-bucket.cos.chinac.com/multipart.data",
    "Bucket": "test-bucket",
    "Key": "multipart.data",
    "ETag": "B864DB6A936D376F9F8D3ED3BBE540DD-3"
}

results matching ""

    No results matching ""