全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网
对象存储 OSS

CompleteMultipartUpload

更新时间:2017-06-07 13:26:11

在将所有数据Part都上传完成后,必须调用Complete Multipart Upload API来完成整个文件的Multipart Upload。在执行该操作时,用户必须提供所有有效的数据Part的列表(包括part号码和ETAG);OSS收到用户提交的Part列表后,会逐一验证每个数据Part的有效性。当所有的数据Part验证通过后,OSS将把这些数据part组合成一个完整的Object。

请求语法

POST /ObjectName?uploadId=UploadId HTTP/1.1
Host: BucketName.oss-cn-hangzhou.aliyuncs.com
Date: GMT Date
Content-Length: Size
Authorization: Signature

<CompleteMultipartUpload>
<Part>
<PartNumber>PartNumber</PartNumber>
<ETag>ETag</ETag>
</Part>
...
</CompleteMultipartUpload>

请求参数(Request Parameters)

Complete Multipart Upload时,可以通过encoding-type对返回结果中的Key进行编码。

名称 描述
encoding-type 指定对返回的Key进行编码,目前支持url编码。Key使用UTF-8字符,但xml 1.0标准不支持解析一些控制字符,比如ascii值从0到10的字符。对于Key中包含xml 1.0标准不支持的控制字符,可以通过指定encoding-type对返回的Key进行编码。
数据类型:字符串
默认值:无,可选值:url

请求元素(Request Elements)

名称 描述
CompleteMultipartUpload 保存Complete Multipart Upload请求内容的容器。
类型:容器
子节点:一个或多个Part元素
父节点:无
ETag Part成功上传后,OSS返回的ETag值。
类型:字符串
父节点:Part
Part 保存已经上传Part信息的容器。
类型:容器
子节点:ETag, PartNumber
父节点:InitiateMultipartUploadResult
PartNumber Part数目。
类型:整数
父节点:Part

响应元素(Response Elements)

名称 描述
Bucket Bucket名称。
类型:字符串
父节点:CompleteMultipartUploadResult
CompleteMultipartUploadResult 保存Complete Multipart Upload请求结果的容器。
类型:容器
子节点:Bucket, Key, ETag, Location
父节点:None
ETag ETag (entity tag) 在每个Object生成的时候被创建,用于标示一个Object的内容。Complete Multipart Upload请求创建的Object,ETag值是其内容的UUID。ETag值可以用于检查Object内容是否发生变化。.
类型:字符串
父节点:CompleteMultipartUploadResult
Location 新创建Object的URL。
类型:字符串
父节点:CompleteMultipartUploadResult
Key 新创建Object的名字。
类型:字符串
父节点:CompleteMultipartUploadResult
EncodingType 指明返回结果中编码使用的类型。如果请求的参数中指定了encoding-type,那返回的结果会对Key进行编码。
类型:字符串
父节点:容器

细节分析

  1. Complete Multipart Upload时,会确认除最后一块以外所有块的大小都大于100KB,并检查用户提交的Partlist中的每一个Part号码和Etag。所以在上传Part时,客户端除了需要记录Part号码外,还需要记录每次上传Part成功后,服务器返回的ETag值。
  2. OSS处理Complete Multipart Upload请求时,会持续一定的时间。在这段时间内,如果客户端和OSS之间的链接断掉,OSS仍会继续将请求做完。
  3. 用户提交的Part List中,Part号码可以是不连续的。例如第一块的Part号码是1;第二块的Part号码是5。
  4. OSS处理Complete Multipart Upload请求成功后,该Upload ID就会变成无效。
  5. 同一个Object可以同时拥有不同的Upload Id,当Complete一个Upload ID后,该Object的其他Upload ID不受影响。
  6. 若调用Initiate Multipart Upload接口时,指定了x-oss-server-side-encryption请求头,则在Complete Multipart Upload的响应头中,会返回x-oss-server-side-encryption,其值表明该Object的服务器端加密算法。
  7. 如果用户上传了Content-MD5请求头,OSS会计算body的Content-MD5并检查一致性,如果不一致,将返回InvalidDigest错误码。

示例

请求示例:

POST /multipart.data? uploadId=0004B9B2D2F7815C432C9057C03134D4  HTTP/1.1
Host: oss-example.oss-cn-hangzhou.aliyuncs.com
Content-Length: 1056
Date: Fri, 24 Feb 2012 10:19:18 GMT
Authorization: OSS qn6qrrqxo2oawuk53otfjbyc:8VwFhFUWmVecK6jQlHlXMK/zMT0=

<CompleteMultipartUpload> 
    <Part> 
        <PartNumber>1</PartNumber>  
        <ETag>"3349DC700140D7F86A078484278075A9"</ETag> 
    </Part>  
    <Part> 
        <PartNumber>5</PartNumber>  
        <ETag>"8EFDA8BE206636A695359836FE0A0E0A"</ETag> 
    </Part>  
    <Part> 
        <PartNumber>8</PartNumber>  
        <ETag>"8C315065167132444177411FDA149B92"</ETag> 
    </Part> 
</CompleteMultipartUpload>

返回示例:

HTTP/1.1 200 OK
Server: AliyunOSS
Content-Length: 329
Content-Type: Application/xml
Connection: keep-alive
x-oss-request-id: 594f0751-3b1e-168f-4501-4ac71d217d6e
Date: Fri, 24 Feb 2012 10:19:18 GMT

<?xml version="1.0" encoding="UTF-8"?>
<CompleteMultipartUploadResult xmlns=”http://doc.oss-cn-hangzhou.aliyuncs.com”>
    <Location>http://oss-example.oss-cn-hangzhou.aliyuncs.com /multipart.data</Location>
    <Bucket>oss-example</Bucket>
    <Key>multipart.data</Key>
    <ETag>B864DB6A936D376F9F8D3ED3BBE540DD-3</ETag>
</CompleteMultipartUploadResult>
本文导读目录