在將所有資料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>
請求參數(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 | 返回該錯誤的可能原因如下:
|