在將所有數據Part都上傳完成后,您必須調用CompleteMultipartUpload接口來完成整個文件的分片上傳。
注意事項
調用CompleteMultipartUpload操作時,用戶必須提供所有有效的Part列表(包括PartNumber和ETag)。OSS收到用戶提交的Part列表后,會逐一驗證每個Part的有效性。當所有的Part驗證通過后,OSS將把這些Part組合成一個完整的Object。
確認Part的大小
在調用CompleteMultipartUpload時會確認除最后一個Part以外所有Part的大小是否都大于或等于100 KB,并檢查用戶提交的Part列表中的每一個PartNumber和ETag。因此,在上傳Part時,客戶端除了需要記錄Part號碼外,還需要記錄每次上傳Part成功后服務器返回的ETag值。
處理請求
由于OSS處理CompleteMultipartUpload請求時會持續一定的時間。在這段時間內,如果客戶端與OSS之間連接中斷,OSS仍會繼續處理該請求。
PartNumber
服務端在調用CompleteMultipartUpload接口時會對PartNumber做校驗。
PartNumber取值為1~10000。PartNumber可以不連續,但必須升序排列。例如第一個Part的PartNumber是1,第二個Part的PartNumber可以是5。
UploadId
同一個Object可以同時擁有不同的UploadId,當Complete一個UploadId后,此UploadId將無效,但該Object的其他UploadId不受影響。
x-oss-server-side-encryption請求頭
如果調用InitiateMultipartUpload接口時,指定了x-oss-server-side-encryption請求頭,則在CompleteMultipartUpload的響應頭中返回x-oss-server-side-encryption,其值表示該Object的服務器端加密算法。
版本控制
在開啟版本控制的情況下,調用CompleteMultipartUpload接口來完成整個文件的MultipartUpload,OSS會為整個文件生成唯一的版本ID,并在響應header中以x-oss-version-id的形式返回。
請求語法
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>
當您在OSS ON云盒中調用該接口時,您需要將Host替換為云盒Endpoint。更多信息,請參見云盒Endpoint。
請求參數(Request Parameters)
調用CompleteMultipartUpload接口時,可以通過Encoding-type對返回結果中的Key進行編碼。
名稱 | 類型 | 描述 |
encoding-type | 字符串 | 指定對返回的Key進行編碼,目前只支持URL編碼。 Key使用UTF-8字符,但XML 1.0標準不支持解析一些控制字符,例如ASCII碼值從0到10的字符。當Key中包含XML 1.0標準不支持的控制字符時,您可以通過指定Encoding-type對返回的Key進行編碼。 默認值:無 有效值:url |
請求頭
名稱 | 類型 | 是否必選 | 描述 |
x-oss-forbid-overwrite | 字符串 | 否 | 指定CompleteMultipartUpload操作時是否覆蓋同名Object。
說明
|
x-oss-complete-all | 字符串 | 否 | 指定是否列舉當前UploadId已上傳的所有Part。 取值:yes
|
此接口還需要包含Host、Date等公共請求頭。關于公共請求頭的更多信息,請參見公共HTTP頭定義。
請求元素
名稱 | 類型 | 描述 |
CompleteMultipartUpload | 容器 | 保存CompleteMultipartUpload請求內容的容器。 子節點:一個或多個Part元素 父節點:無 |
ETag | 字符串 | Part成功上傳后,OSS返回的ETag值。 父節點:Part |
Part | 容器 | 保存已上傳Part信息的容器。 子節點:ETag、PartNumber 父節點:CompleteMultipartUpload |
PartNumber | 整數 | Part數目。 父節點:Part |
響應元素
名稱 | 類型 | 描述 |
Bucket | 字符串 | Bucket名稱。 父節點:CompleteMultipartUploadResult |
CompleteMultipartUploadResult | 容器 | 保存Complete Multipart Upload請求結果的容器。 子節點:Bucket、Key、ETag、Location 父節點:None |
ETag | 字符串 | Object生成時會創建相應的ETag ,ETag用于標識一個Object的內容。 通過CompleteMultipartUpload請求創建的Object,ETag值是基于一定計算規則生成的唯一值,但不是其內容的MD5值。 說明 ETag值可以用于檢查Object內容是否發生變化。不建議使用ETag作為Object內容的MD5來校驗數據完整性。 父節點:CompleteMultipartUploadResult |
Location | 字符串 | 新創建Object的URL。 父節點:CompleteMultipartUploadResult |
Key | 字符串 | 新創建Object的名字。 父節點:CompleteMultipartUploadResult |
EncodingType | 字符串 | 顯示返回結果中使用的編碼類型。如果請求參數中指定了Encoding-type,那么返回的結果會對Key進行編碼。 父節點:容器 |
示例
未開啟版本控制
請求示例
POST /multipart.data?uploadId=0004B9B2D2F7815C432C9057C031****&encoding-type=url 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 qn6q**************:77Dv**************** <CompleteMultipartUpload> <Part> <PartNumber>1</PartNumber> <ETag>"3349DC700140D7F86A0784842780****"</ETag> </Part> <Part> <PartNumber>5</PartNumber> <ETag>"8EFDA8BE206636A695359836FE0A****"</ETag> </Part> <Part> <PartNumber>8</PartNumber> <ETag>"8C315065167132444177411FDA14****"</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-4ac71d21**** 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”> <EncodingType>url</EncodingType> <Location>http://oss-example.oss-cn-hangzhou.aliyuncs.com /multipart.data</Location> <Bucket>oss-example</Bucket> <Key>multipart.data</Key> <ETag>"B864DB6A936D376F9F8D3ED3BBE540****"</ETag> </CompleteMultipartUploadResult>
已啟用版本控制
請求示例
POST /multipart.data?uploadId=63C06A5CFF6F4AE4A6BB3AD7F01C**** HTTP/1.1 Host: oss-example.oss-cn-hangzhou.aliyuncs.com Content-Length: 223 Date: Tue, 09 Apr 2019 07:01:56 GMT Authorization: OSS qn6q**************:77Dv**************** <CompleteMultipartUpload> <Part> <PartNumber>1</PartNumber> <ETag>"25A9F4ABFCC05743DF6E2C886C56****"</ETag> </Part> <Part> <PartNumber>5</PartNumber> <ETag>"25A9F4ABFCC05743DF6E2C886C56****"</ETag> </Part> </CompleteMultipartUpload>
返回示例
HTTP/1.1 200 OK Server: AliyunOSS Content-Length: 314 Content-Type: Application/xml Connection: keep-alive x-oss-version-id: CAEQMxiBgID6v86D0BYiIDc3ZDI0YTBjZGQzYjQ2Mjk4OWVjYWNiMDljYzhlN**** x-oss-request-id: 5CAC4364B7AEADE017000662 Date: Tue, 09 Apr 2019 07:01:56 GMT <?xml version="1.0" encoding="UTF-8"?> <CompleteMultipartUploadResult> <Location>http://oss-example.oss-cn-hangzhou.aliyuncs.com/multipart.data</Location> <Bucket>oss-example</Bucket> <Key>multipart.data</Key> <ETag>"097DE458AD02B5F89F9D0530231876****"</ETag> </CompleteMultipartUploadResult>
SDK
此接口所對應的各語言SDK如下:
錯誤碼
錯誤碼 | HTTP 狀態碼 | 描述 |
InvalidDigest | 400 | 為了保證數據在網絡傳輸過程中不出現錯誤,用戶發送請求時可以攜帶Content-MD5,OSS計算上傳數據的MD5與用戶上傳的MD5值進行比較,如果不一致則表示數據傳輸出現錯誤。 |
FileAlreadyExists | 409 | 當請求的Header中攜帶 |