全部產品
Search
文件中心

Object Storage Service:CompleteMultipartUpload

更新時間:Jun 19, 2024

在將所有資料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-forbid-overwrite或者指定x-oss-forbid-overwrite為false時,表示允許覆蓋同名Object。

  • 指定x-oss-forbid-overwrite為true時,表示禁止覆蓋同名Object。

說明
  • 當目標Bucket的版本控制狀態為“開啟”或“暫停”時,x-oss-forbid-overwrite請求Header設定無效,即允許覆蓋同名Object。

  • 設定x-oss-forbid-overwrite請求Header會導致QPS處理效能下降,如果您有大量的操作需要使用x-oss-forbid-overwrite請求Header(QPS > 1000),請工單聯絡我們進行確認,避免影響您的業務。

x-oss-complete-all

字串

指定是否列舉當前UploadId已上傳的所有Part。

取值:yes

  • 如果指定了x-oss-complete-all,且值為yes,則OSS會列舉當前UploadId已上傳的所有Part,然後按照PartNumber的序號排序並執行CompleteMultipartUpload操作。執行CompleteMultipartUpload過程中無法檢測正在上傳或者漏傳的Part,因此使用者需要自己確保Part的完整性。

  • 如果指定了x-oss-complete-all,則不允許繼續指定body,否則報錯。

  • 如果指定了x-oss-complete-all,Response的格式保持不變。

此介面還需要包含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中攜帶了x-oss-forbid-overwrite=true來禁止覆蓋同名檔案,但是Bucket中已有同名檔案。

  • Bucket開啟階層命名空間後,當您要在該Bucket中完成某個檔案的分區上傳時,設定的Object為目錄。