初始化一個Multipart Upload之後,可以根據指定的Object名和Upload ID來分塊(Part)上傳數據。每一個上傳的Part都有一個標識它的號碼(part number,範圍是1~10,000)。

對於同一個Upload ID,該號碼不但唯一標識這一塊數據,也標識了這塊數據在整個檔案內的相對位置。如果你用同一個part號碼,上傳了新的數據,那麼OSS上已有的這個號碼的Part數據將被覆蓋。除了最後一塊Part以外,其他的part最小為100KB;最後一塊Part沒有大小限制。

請求文法

PUT /ObjectName?partNumber=PartNumber&uploadId=UploadId HTTP/1.1
Host: BucketName.oss-cn-hangzhou.aliyuncs.com
Date: GMT Date
Content-Length: Size
Authorization: SignatureValue

細節分析

  • 調用該介面上傳Part數據前,必須調用Initiate Multipart Upload介面,獲取一個OSS伺服器頒發的Upload ID。
  • Multipart Upload要求除最後一個Part以外,其他的Part大小都要大於100KB。但是Upload Part介面並不會立即校驗上傳Part的大小(因為不知道是否為最後一塊);只有當Complete Multipart Upload的時候才會校驗。
  • OSS會將伺服器端收到Part數據的MD5值放在ETag頭內返回給用戶。
  • Part號碼的範圍是1~10000。如果超出這個範圍,OSS將返回InvalidArgument的錯誤碼。
  • 若調用Initiate Multipart Upload介面時,指定了x-oss-server-side-encryption要求標頭,則會對上傳的Part進行加密編碼,並在Upload Part回應標頭中返回x-oss-server-side-encryption頭,其值表明該Part的伺服器端密碼編譯演算法,具體見Initiate Multipart Upload介面。
  • 為了保證數據在網路傳輸過程中不出現錯誤,用戶發送請求時攜帶Content-MD5,OSS會計算上傳數據的MD5與用戶上傳的MD5值比較,如果不一致返回InvalidDigest錯誤碼。

樣本

請求樣本:

PUT /multipart.data?partNumber=1&uploadId=0004B9895DBBB6EC98E36  HTTP/1.1
Host: oss-example.oss-cn-hangzhou.aliyuncs.com
Content-Length:6291456
Date: Wed, 22 Feb 2012 08:32:21 GMT
Authorization: OSS qn6qrrqxo2oawuk53otfjbyc:J/lICfXEvPmmSW86bBAfMmUmWjI=
[6291456 bytes data]

返回樣本:

HTTP/1.1 200 OK
Server: AliyunOSS
Connection: keep-alive
ETag: 7265F4D211B56873A381D321F586E4A9
x-oss-request-id: 3e6aba62-1eae-d246-6118-8ff42cd0c21a
Date: Wed, 22 Feb 2012 08:32:21 GMT