華為云計算 云知識 合并段CompleteMultipartUpload
合并段CompleteMultipartUpload

 

接口說明

如果用戶上傳完所有的段,就可以調(diào)用合并段接口,系統(tǒng)將在服務(wù)端將用戶指定的段合并成一個完整的對象。在執(zhí)行“合并段”操作以前,用戶不能下載已經(jīng)上傳的數(shù)據(jù)。在合并段時需要將多段上傳任務(wù)初始化時記錄的附加消息頭信息拷貝到對象元數(shù)據(jù)中,其處理過程和普通上傳對象帶這些消息頭的處理過程相同。在并發(fā)合并段的情況下,仍然遵循Last Write Win策略,但“Last Write”的時間定義為段任務(wù)的初始化時間。 已經(jīng)上傳的段,只要沒有取消對應(yīng)的多段上傳任務(wù),都要占用用戶的容量配額;對應(yīng)的多段上傳任務(wù)“合并段”操作完成后,只有指定的多段數(shù)據(jù)占用容量配額,用戶上傳的其他此多段任務(wù)對應(yīng)的段數(shù)據(jù)如果沒有包含在“合并段”操作制定的段列表中,“合并段”完成后刪除多余的段數(shù)據(jù),且同時釋放容量配額。 合并完成的多段上傳數(shù)據(jù)可以通過已有的下載對象接口,下載整個多段上傳對象或者指定Range下載整個多段上傳對象的某部分?jǐn)?shù)據(jù)。 合并完成的多段上傳數(shù)據(jù)可以通過已有的刪除對象接口,刪除整個多段上傳對象的所有分段數(shù)據(jù),刪除后不可恢復(fù)。 合并完成的多段上傳數(shù)據(jù)不記錄整個對象的MD5作為Etag,在下載多段數(shù)據(jù)或List桶內(nèi)對象看到的多段數(shù)據(jù)其Etag的生成方式為:MD5(M1M2......MN)-N,其中,Mn表示第n段的MD5值, 如請求示例所示,有3個分段,每個分段都有對應(yīng)的MD5值,合并段ETag的生成是先將3個分段的MD5合并起來再進(jìn)行MD5計算得到一個新值,再拼接-N作為合并段的ETag值,-N表示總共有多少段,在該示例中即為-3。 合并段請求如果出現(xiàn)等待響應(yīng)超時、服務(wù)端返回500或503報錯時,建議客戶端可以先嘗試獲取多段任務(wù)對應(yīng)的對象元數(shù)據(jù),并比較響應(yīng)的x-obs-uploadId頭域的值,是否與本次要合并的段任務(wù)ID相同,如果相同,說明服務(wù)端實際已經(jīng)合并段成功,無需再進(jìn)行重試。關(guān)于并發(fā)一致性說明,參見7.5-并發(fā)一致性說明

多版本 #### 如果桶的多版本狀態(tài)是開啟的,則合并段后得到的對象生成一個唯一的版本號,并且會在響應(yīng)報頭x-obs-version-id返回該版本號。如果桶的多版本狀態(tài)是暫停的,則合并段后得到的對象版本號為null。關(guān)于桶的多版本狀態(tài),參見設(shè)置桶的多版本狀態(tài)。

須知: 如果上傳了10個段,但合并時只選擇了9個段進(jìn)行合并,那么未被合并的段將會被系統(tǒng)自動刪除,未被合并的段刪除后不能恢復(fù)。在進(jìn)行合并之前請使用列出已上傳的段接口進(jìn)行查詢,仔細(xì)核對所有段,確保沒有段被遺漏。

URL
POST  https://obs.cn-north-4.myhuaweicloud.com/{object_key} 
請求參數(shù)
名稱 類型 IN 必選 描述
Authorization
 
string header

請求消息中可帶的簽名信息。

Date
 
string header

請求發(fā)起端的日期和時間,例如:Wed, 27 Jun 2018 13:39:15 +0000。 默認(rèn)值:無。 條件:如果消息頭中帶了x-obs-date字段,則可以不帶該字段,其他情況下必選。

object_key
 
string path

對象名稱。

bucket_name
 
string query

桶名稱

uploadId
 
string query

多段上傳任務(wù)的id。

encoding-type
 
string query

對響應(yīng)中的Key進(jìn)行指定類型的編碼。如果Key包含xml 1.0標(biāo)準(zhǔn)不支持的控制字符,可通過設(shè)置encoding-type對響應(yīng)中的Key進(jìn)行編碼。

Body參數(shù)
名稱 類型 必選 描述
Part
 
Array of CompleteMultipartUploadPart objects

合并的段。

參數(shù):
Part
名稱 類型 必選 描述
PartNumber
 
integer

段號。

ETag
 
string

上傳段成功后返回的ETag值,是段內(nèi)容的唯一標(biāo)識。該值用于合并段時進(jìn)行數(shù)據(jù)一致性校驗。

返回參數(shù)
返回碼: 200

請求成功響應(yīng)消息。

名稱 類型 必選 描述
Content-Length
 
string

響應(yīng)消息體的字節(jié)長度。

Connection
 
string

指明與服務(wù)器的連接是長連接還是短連接。

Date
 
string

OBS系統(tǒng)響應(yīng)的時間。

ETag
 
string

對象的base64編碼的128位MD5摘要。ETag是對象內(nèi)容的唯一標(biāo)識,可以通過該值識別對象內(nèi)容是否有變化。比如上傳對象時ETag為A,下載對象時ETag為B,則說明對象內(nèi)容發(fā)生了變化。實際的ETag是對象的哈希值。ETag只反映變化的內(nèi)容,而不是其元數(shù)據(jù)。上傳的對象或拷貝操作創(chuàng)建的對象,通過MD5加密后都有唯一的ETag。如果通過多段上傳對象,則無論加密方法如何,MD5會拆分ETag,此類情況ETag就不是MD5的摘要。

x-obs-id-2
 
string

幫助定位問題的特殊符號。

x-obs-request-id
 
string

由OBS創(chuàng)建來唯一確定本次請求的值,可以通過該值來定位問題。

x-obs-version-id
 
string

合并得到的對象的版本號。

x-obs-server-side-encryption
 
string

如果服務(wù)端加密是SSE-KMS方式,響應(yīng)包含該頭域。

類型:字符串

示例:x-obs-server-side-encryption:kms

x-obs-server-side-encryption-kms-key-id
 
string

如果服務(wù)端加密是SSE-KMS方式,響應(yīng)包含該頭域,該頭域表示主密鑰。

類型:字符串

格式為: regionID:domainID(租戶ID):key/key_id

其中regionID是使用密鑰所屬region的ID;domainID是使用密鑰所屬租戶的租戶ID;key_id是本次加密使用的密鑰ID。

示例: x-obs-server-side-encryption-kms-key-id:cn-north-4:domainiddomainiddomainiddoma0001:key/4f1cd4de-ab64-4807-920a-47fc42e7f0d0

x-obs-server-side-encryption-customer-algorithm
 
string

如果服務(wù)端加密是SSE-C方式,響應(yīng)包含該頭域,該頭域表示加密使用的算法。

類型:字符串

示例:x-obs-server-side-encryption-customer-algorithm:AES256

返回碼: 400

請求失敗響應(yīng)消息。 除了公共的錯誤碼外,此接口還會返回一些其他的錯誤碼。下面列出本接口的一些常見錯誤,以及可能原因。

錯誤碼 描述 HTTP狀態(tài)碼
- 沒有消息體。 400 Bad Request
- 消息體格式不正確。 400 Bad Request
InvalidPartOrderInvalidPartOrder 消息體中段信息未按照段序號升序排列。 400 Bad Request
InvalidPart 請求段列表中包含了不存在的段。 400 Bad Request
InvalidPart 請求段列表中包含的段的Etag錯誤。 400 Bad Request
- 除最后一個段之外的其它段尺寸過小(小于100KB)。 400 Bad Request
- 對象在合并完成后總大小如果超過48.8TB。 400 Bad Request
名稱 類型 必選 描述
Code
 
string

錯誤響應(yīng)消息體XML中錯誤響應(yīng)對應(yīng)的HTTP消息返回碼,具體的錯誤碼請參見錯誤碼-表2

Message
 
string

錯誤響應(yīng)消息體XML中具體錯誤更全面、詳細(xì)的英文解釋,具體的錯誤消息請參見錯誤碼-表2。

RequestId
 
string

本次錯誤請求的請求ID,用于錯誤定位。

HostId
 
string

返回該消息的服務(wù)端ID。

Resource
 
string

該錯誤相關(guān)的桶或?qū)ο筚Y源。

返回碼: 403

請求失敗響應(yīng)消息。 除了公共的錯誤碼外,此接口還會返回一些其他的錯誤碼。下面列出本接口的一些常見錯誤,以及可能原因。

錯誤碼 描述 HTTP狀態(tài)碼
AccessDenied AccessKey或簽名無效。 403 Forbidden
AccessDenied 用戶不是該任務(wù)的發(fā)起者(initiator)。 403 Forbidden
名稱 類型 必選 描述
Code
 
string

錯誤響應(yīng)消息體XML中錯誤響應(yīng)對應(yīng)的HTTP消息返回碼,具體的錯誤碼請參見錯誤碼-表2。

Message
 
string

錯誤響應(yīng)消息體XML中具體錯誤更全面、詳細(xì)的英文解釋,具體的錯誤消息請參見錯誤碼-表2。

RequestId
 
string

本次錯誤請求的請求ID,用于錯誤定位。

HostId
 
string

返回該消息的服務(wù)端ID。

Resource
 
string

該錯誤相關(guān)的桶或?qū)ο筚Y源。

返回碼: 404

請求失敗響應(yīng)消息。 除了公共的錯誤碼外,此接口還會返回一些其他的錯誤碼。下面列出本接口的一些常見錯誤,以及可能原因。

錯誤碼 描述 HTTP狀態(tài)碼
NoSuchBucket 請求的桶不存在。 404 Not Found
NoSuchUpload 請求的多段上傳任務(wù)不存在。 404 Not Found
名稱 類型 必選 描述
Code
 
string

錯誤響應(yīng)消息體XML中錯誤響應(yīng)對應(yīng)的HTTP消息返回碼,具體的錯誤碼請參見錯誤碼-表2

Message
 
string

錯誤響應(yīng)消息體XML中具體錯誤更全面、詳細(xì)的英文解釋,具體的錯誤消息請參見錯誤碼-表2

RequestId
 
string

本次錯誤請求的請求ID,用于錯誤定位。

HostId
 
string

返回該消息的服務(wù)端ID。

Resource
 
string

該錯誤相關(guān)的桶或?qū)ο筚Y源。

請求示例
示例 1
 
"POST /object02?uploadId=00000163D46218698DF407362295674C"
 
"POST /object02?uploadId=00000163D46218698DF407362295674C HTTP/1.1\nUser-Agent: curl/7.29.0\nHost: examplebucket.obs.cn-north-4.myhuaweicloud.com\nAccept: */*\nDate: WED, 01 Jul 2015 05:23:46 GMT\nAuthorization: OBS H4IPJX0TQTHTHEBQQCEC:dOfK9iILcKxo58tRp3fWeDoYzKA=\nContent-Length: 422\n\n<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<CompleteMultipartUpload> \n <Part> \n <PartNumber>1</PartNumber> \n <ETag>a54357aff0632cce46d942af68356b38</ETag> \n </Part> \n <Part> \n <PartNumber>2</PartNumber> \n <ETag>0c78aef83f66abc1fa1e8477f296d394</ETag> \n </Part> \n <Part> \n <PartNumber>3</PartNumber> \n <ETag>acbd18db4cc2f85cedef654fccc4a4d8</ETag> \n </Part>\n</CompleteMultipartUpload>"
錯誤碼
請參考 錯誤碼說明。