UploadPartCopy通過從一個已存在的Object中拷貝數據來上傳一個Part。

通過在Upload Part請求的基礎上增加一個Header:x-oss-copy-source來調用該介面。當拷貝一個大於1GB的檔案時,必須使用Upload Part Copy的方式進行拷貝。Upload Part Copy 的源Bucket地址和目標Bucket地址必須是同一個Region。如果想通過單個操作拷貝小於1GB的檔案,可以參考Copy Object。

請求文法

PUT /ObjectName? partNumber=PartNumber&uploadId=UploadId HTTP/1.1
Host: BucketName.oss-cn-hangzhou.aliyuncs.com
Date: GMT Date
Content-Length: Size
Authorization: SignatureValue
x-oss-copy-source: /SourceBucketName/SourceObjectName
x-oss-copy-source-range:bytes=first-last

請求Header

除了通用的請求Header,Upload Part Copy請求中通過下述Header指定拷貝的源Object地址和拷貝的範圍。

名稱 類型 描述
x-oss-copy-source 字元串 複製源地址(必須有可讀許可權)

預設值:無

x-oss-copy-source-range 整型 源Object的拷貝範圍。如,設定 bytes=0-9,表示傳送第0到第9這10個字元。 當拷貝整個源Object時不需要該請求Header。

預設值:無

下述請求Header作用於x-oss-copy-source指定的源Object。

名稱 類型 描述
x-oss-copy-source-if-match 字元串 如果源Object的ETAG值和用戶提供的ETAG相等,則執行拷貝操作;否則返回412 HTTP錯誤碼(預先處理失敗)。

預設值:無

x-oss-copy-source-if-none-match 字元串 如果源Object自從用戶指定的時間以後就沒有被修改過,則執行拷貝操作;否則返回412 HTTP錯誤碼(預先處理失敗)。

預設值:無

x-oss-copy-source-if-unmodified-since 字元串 如果傳入參數中的時間等於或者晚於檔案實際修改時間,則正常傳輸檔案,並返回200 OK;否則返回412 precondition failed錯誤。

預設值:無

x-oss-copy-source-if-modified-since 字元串 如果源Object自從用戶指定的時間以後被修改過,則執行拷貝操作;否則返回412 HTTP錯誤碼(預先處理失敗)。

預設值:無

響應元素(Response Elements)

名稱 類型 描述
x-oss-copy-source-if-match 字元串 如果源Object的ETAG值和用戶提供的ETAG相等,則執行拷貝操作;否則返回412 HTTP錯誤碼(預先處理失敗)。

預設值:無

x-oss-copy-source-if-none-match 字元串 如果源Object自從用戶指定的時間以後就沒有被修改過,則執行拷貝操作;否則返回412 HTTP錯誤碼(預先處理失敗)。

預設值:無

x-oss-copy-source-if-unmodified-since 字元串 如果傳入參數中的時間等於或者晚於檔案實際修改時間,則正常傳輸檔案,並返回200 OK;否則返回412 precondition failed錯誤。

預設值:無

x-oss-copy-source-if-modified-since 字元串 如果源Object自從用戶指定的時間以後被修改過,則執行拷貝操作;否則返回412 HTTP錯誤碼(預先處理失敗)。

預設值:無

細節分析

  • 調用該介面上傳Part數據前,必須調用Initiate Multipart Upload介面,獲取一個OSS伺服器頒發的Upload ID。
  • Multipart Upload要求除最後一個Part以外,其他的Part大小都要大於100KB。但是Upload Part介面並不會立即校驗上傳Part的大小(因為不知道是否為最後一塊);只有當Complete Multipart Upload的時候才會校驗。
  • 不指定x-oss-copy-source-range要求標頭時,表示拷貝整個源Object。當指定該要求標頭時,則返回消息中會包含整個檔案的長度和此次拷貝的範圍,例如:Content-Range: bytes 0-9/44,表示整個檔案長度為44,此次拷貝的範圍為0-9。當指定的範圍不符合範圍規範時,則拷貝整個檔案,並且不在結果中提及Content-Range。
  • 若調用Initiate Multipart Upload介面時,指定了x-oss-server-side-encryption要求標頭,則會對上傳的Part進行加密編碼,並在Upload Part回應標頭中返回x-oss-server-side-encryption頭,其值表明該Part的伺服器端密碼編譯演算法,具體見Initiate Multipart Upload介面。
  • 該操作不能拷貝通過Append追加上傳方式產生的object。
  • 如果Bucket的類型為Archive,則不能調用該介面,否則返回400錯誤,錯誤碼為OperationNotSupported。

樣本

請求樣本:

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=
x-oss-copy-source: /oss-example/ src-object
x-oss-copy-source-range:bytes=100-6291756

返回樣本:

HTTP/1.1 200 OK
Server: AliyunOSS
Connection: keep-alive
x-oss-request-id: 3e6aba62-1eae-d246-6118-8ff42cd0c21a
Date: Thu, 17 Jul 2014 06:27:54 GMT'
<?xml version="1.0" encoding="UTF-8"?>
<CopyPartResult xmlns=”http://doc.oss-cn-hangzhou.aliyuncs.com”>
    <LastModified>2014-07-17T06:27:54.000Z </LastModified>
    <ETag>"5B3C1A2E053D763E1B002CC607C5A0FE"</ETag>
</CopyPartResult>