閱讀55 返回首頁    go 人物


CompleteMultipartUpload__關於MultipartUpload的操作_API 參考_對象存儲 OSS-阿裏雲

在將所有數據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=”https://doc.oss-cn-hangzhou.aliyuncs.com”>
    <Location>https://oss-example.oss-cn-hangzhou.aliyuncs.com /multipart.data</Location>
    <Bucket>oss-example</Bucket>
    <Key>multipart.data</Key>
    <ETag>B864DB6A936D376F9F8D3ED3BBE540DD-3</ETag>
</CompleteMultipartUploadResult>

最後更新:2016-11-23 17:16:08

  上一篇:go UploadPartCopy__關於MultipartUpload的操作_API 參考_對象存儲 OSS-阿裏雲
  下一篇:go AbortMultipartUpload__關於MultipartUpload的操作_API 參考_對象存儲 OSS-阿裏雲