完成分块上传

最近更新时间: 2024-06-12 15:06:00

功能描述

Complete Multipart Upload 接口请求用来实现完成整个分块上传。当使用 Upload Parts 上传完所有块以后,必须调用该 API 来完成整个文件的分块上传。在使用该 API 时,您必须在请求 Body 中给出每一个块的 PartNumber 和 ETag,用来校验块的准确性。 由于分块上传完后需要合并,而合并需要数分钟时间,因而当合并分块开始的时候,COS 就立即返回200的状态码,在合并的过程中,COS 会周期性的返回空格信息来保持连接活跃,直到合并完成,COS会在 Body 中返回合并后块的内容。

  • 当上传块小于1MB的时候,在调用该 API 时,会返回400 EntityTooSmall。

  • 当上传块编号不连续的时候,在调用该 API 时,会返回400 InvalidPart。

  • 当请求 Body 中的块信息没有按序号从小到大排列的时候,在调用该 API 时,会返回400 InvalidPartOrder。

  • 当 UploadId 不存在的时候,在调用该 API 时,会返回404 NoSuchUpload。

    注意:

    建议您及时完成分块上传或者舍弃分块上传,因为已上传但是未终止的块会占用存储空间进而产生存储费用。

请求

请求示例

POST /<ObjectKey>?uploadId=UploadId HTTP/1.1
Host: <BucketName-APPID>.<Endpoint>
Date: GMT Date
Content-length: Size
Authorization: Auth String

说明:

Authorization: Auth String(详情请参阅请求签名章节)。

请求头

公共头部

该请求操作的实现使用公共请求头,了解公共请求头详细请参见 公共请求头部 章节。

非公共头部

该请求操作无特殊的请求头部信息。

请求体

该 API 接口请求的请求体具体节点内容为:

<CompleteMultipartUpload>
  <Part>
    <PartNumber>1</PartNumber>
    <ETag>"fc392a65890e447ff4e2d256489a9773"</ETag>
  </Part>
  <Part>
    <PartNumber>2</PartNumber>
    <ETag>"fc392a65890e447ff4e2d256489a9773"</ETag>
  </Part>
    ...
</CompleteMultipartUpload>

具体的数据内容如下:

节点名称(关键字) 父节点 描述 类型 必选
CompleteMultipartUpload 用来说明本次分块上传的所有信息 Container

Container 节点 CompleteMultipartUpload 的内容:

节点名称(关键字) 父节点 描述 类型 必选
Part CompleteMultipartUpload 用来说明本次分块上传中每个块的信息 Container

Container 节点 Part 的内容:

节点名称(关键字) 父节点 描述 类型 必选
PartNumber CompleteMultipartUpload.Part 块编号 Integer
ETag CompleteMultipartUpload.Part 每个块文件的 MD5 算法校验值 String

响应

响应头

公共响应头

该响应使用公共响应头,了解公共响应头详细请参见 公共响应头部 章节。

响应体

该响应体返回为 application/xml 数据,包含完整节点数据的内容展示如下:

<CompleteMultipartUploadResult>
    <Location>examplebucket-1250000000.cos.ap-beijing.myqcloud.com/ObjectName</Location>
    <Bucket>examplebucket-1250000000</Bucket>
    <Key>examplebucket</Key>
    <ETag>"3a0f1fd698c235af9cf098cb74aa25bc"</ETag>
</CompleteMultipartUploadResult>

具体的数据内容如下:

节点名称(关键字) 父节点 描述 类型
CompleteMultipartUploadResult 说明所有返回信息 Container

Container 节点 CompleteMultipartUploadResult 的内容:

节点名称(关键字) 父节点 描述 类型
Location CompleteMultipartUploadResult 创建 Object 的外网访问域名 URL
Bucket CompleteMultipartUploadResult 分块上传的目标Bucket,由用户自定义字符串和系统生成appid数字串由中划线连接而成,如:examplebucket-1250000000 String
Key CompleteMultipartUploadResult Object 名称 String
ETag CompleteMultipartUploadResult 合并后对象的唯一标签值,该值不是对象内容的 MD5 校验值,仅能用于检查对象唯一性 String

实际案例

请求

POST /exampleobject?uploadId=1484728886e63106e87d8207536ae8521c89c42a436fe23bb58854a7bb5e87b7d77d4ddc48 HTTP/1.1
Host: <BucketName-APPID>.<Endpoint>
Date: Wed,18 Jan 2017 16:17:03 GMT
Authorization: q-sign-algorithm=sha1&q-ak=AKIDWtTCBYjM5OwLB9CAwA1Qb2ThTSUjfGFO&q-sign-time=1484729794;32557625794&q-key-time=1484729794;32557625794&q-header-list=host&q-url-param-list=uploadId&q-signature=23627c8fddb3823cce4257b33c663fd83f9f820d
Content-Length: 138

<CompleteMultipartUpload>
  <Part>
    <PartNumber>1</PartNumber>
    <ETag>"fc392a65890e447ff4e2d256489a9773"</ETag>
  </Part>
  <Part>
    <PartNumber>2</PartNumber>
    <ETag>"fc392a65890e447ff4e2d256489a9774"</ETag>
  </Part>
</CompleteMultipartUpload>

响应

HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: 277
Connection: keep-alive
Date: Wed,18 Jan 2017 16:17:03 GMT
Server: tencent-cos
x-cos-request-id: NTg3ZjJlMjVfNDYyMDRlXzM0YzRfMjc1

<CompleteMultipartUploadResult>
    <Location>examplebucket-1250000000.cos.ap-beijing.myqcloud.com/ObjectName</Location>
    <Bucket>examplebucket-1250000000</Bucket>
    <Key>examplebucket</Key>
    <ETag>"3a0f1fd698c235af9cf098cb74aa25bc"</ETag>
</CompleteMultipartUploadResult>