此操作将完成对象装配之前的块上传任务 。
用户启动一个分块上传任务后,会使用 Upload Parts
接口上传所有的块。成功上传所有相关块之后,用户需要调用此接口来完成分块上传。收到完成请求后,KS3将会根据块序号将所有的块组装起来创建一个新的对象。在用户的完成任务请求中需要用户提供分块列表,由于KS3将会按照列表将所有块连接起来,所以要求用户保证所有的块已经完成上传。对于分块列表中的每一个块,用户需要在上传块时添加块序号以及对象的 ETag
头部,KS3则会在块完成上传后回复完成响应。
请注意,如果 Complete Multipart Upload
请求失败了,用户应用应当能够进行重试操作。
POST /{ObjectKey}?uploadId=UploadId HTTP/1.1
Host: {BucketName}.kss.ksyun.com
Date: Date
Content-Length: Size
Authorization: authorization string
<CompleteMultipartUpload>
<Part>
<PartNumber>PartNumber</PartNumber>
<ETag>ETag</ETag>
</Part>
...
</CompleteMultipartUpload>
该请求不使用请求参数。
该请求仅使用常用请求头部。获取更多信息,请点击常用请求头部
名称 | 描述 | 必须 |
---|---|---|
CompleteMultipartUpload | 请求信息容器。 父节点: 无 类型: Container 子节点: One or more Part elements |
是 |
Part | 某一特定的已上传的块信息容器。 父节点: CompleteMultipartUpload 类型: Container 子节点: PartNumber, ETag |
是 |
PartNumber | 用于标识块的块序列号。 父节点: Part 类型: Integer |
是 |
ETag | 块上传后返回的实体标签。 父节点: Part 类型: String |
是 |
该接口使用常用响应头部。获取更多信息,请点击常用响应头部。
名称 | 描述 |
---|---|
x-kss-server-side-encryption | 如果存储 object 时使用了服务端加密,则响应会包含该头部,值为使用的加密算法。类型:String |
x-kss-server-side-encryption-customer-algorithm | 如果服务端使用了用户提供的加密秘钥加密,在请求解密时,响应将会包含该头部来确认使用的解密算法。 类型:String 有效值:AES256 |
名称 | 描述 |
---|---|
CompleteMultipartUploadResult | 响应信息的容器。 类型: Container 子节点: Location, Bucket, Key, ETag 父节点: None |
Location | 用于标识新创建对象的URI。 类型: URI 父节点: CompleteMultipartUploadResult |
Bucket | 包含新创建对象的空间的名称。 类型: String 父节点: CompleteMultipartUploadResult |
Key | 新创建对象的 object key 。类型: String 父节点: CompleteMultipartUploadResult |
ETag | 用于标识新创建对象内容的实体标签。具有不同内容的对象对应着不同的实体标签。实体标签是一个不透明的字符串,可能包含MD5摘要,也可能不包含。如果不包含对象内容的MD5摘要,它将包含至少一个非十六进制字符和或多于或少于32位的十六进制数字。 类型: String 父节点: CompleteMultipartUploadResult |
错误代码 | 描述 | HTTP状态码 |
---|---|---|
EntityTooSmall | 用户拟上传的块大小小于对象所允许的最小值。除了最后一个块之外,每一个块至少在5MB以上。当文件总大小在5M以内的话,可以允许除了最后一个块之外,每一个块至少在100K以上。 | 400 Bad Request |
InvalidPart | 一个或多个指定的块没有找到。块可能没有被上传,也可能因为上传了但实体标签不匹配。 | 400 Bad Request |
InvalidPartOrder | 分块列表没有按照升序排列。分块必须按序指定分块序号。 | 400 Bad Request |
NoSuchUpload | 指定的分块上传任务不存在。可能是上传ID无效,也可能是分块上传任务已经完成或放弃。 | 404 Not Found |
请求示例
POST /{ObjectKey}?uploadId={UploadId} HTTP/1.1
Host: {BucketName}.kss.ksyun.com
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>
响应示例
HTTP/1.1 200 OK
Date: Mon, 1 Nov 2010 20:34:56 GMT
Connection: close
Server: Tengine
<?xml version="1.0" encoding="UTF-8"?>
<CompleteMultipartUploadResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Location>http://Example-Bucket.kss.ksyun.com/Example-Object</Location>
<Bucket>Example-Bucket</Bucket>
<Key>Example-Object</Key>
<ETag>"3858f62230ac3c915f300c664312c11f-9"</ETag>
</CompleteMultipartUploadResult>