通過在UploadPart請求的基礎上增加一個要求標頭x-oss-copy-source來調用UploadPartCopy介面,實現從一個已存在的Object中拷貝資料來上傳一個Part。
注意事項
當拷貝一個大於1 GB的檔案時,必須使用UploadPartCopy的方式進行拷貝。如果想通過單個操作拷貝小於1 GB的檔案,請參見CopyObject。
使用UploadPartCopy介面時,有如下注意事項:
不允許拷貝以AppendObject方式上傳的Object。
執行UploadPartCopy的源Bucket地址和目標Bucket地址必須是同一個Region。
調用該介面上傳Part資料前,必須先調用InitiateMultipartUpload介面來擷取一個OSS伺服器頒發的Upload ID。
如果調用InitiateMultipartUpload介面時,指定了x-oss-server-side-encryption要求標頭,則會對上傳的Part進行加密編碼,並在UploadPart回應標頭中返回x-oss-server-side-encryption頭,其值表明該Part的伺服器端密碼編譯演算法,詳情請參見InitiateMultipartUpload。
MultipartUpload要求除最後一個Part以外,其他的Part大小都要大於100 KB。因不確定是否為最後一個Part,UploadPart介面並不會立即校正上傳Part的大小,只有當CompleteMultipartUpload的時候才會校正。
版本控制
UploadPartCopy預設從一個已存在的Object的目前的版本中拷貝資料來上傳一個Part。允許通過在要求標頭x-oss-copy-source中附帶versionId的子條件,實現從Object的指定版本進行拷貝,例如x-oss-copy-source : /SourceBucketName/SourceObjectName?versionId=111111。
SourceObjectName需要進行URL編碼。響應中將會返回被拷貝Object的versionId:x-oss-copy-source-version-id。
如果未指定versionId且拷貝Object的目前的版本為刪除標記(Delete Marker),OSS將返回404 Not Found。通過指定versionId來拷貝刪除標記時,OSS將返回400 Bad Request。
請求文法
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
要求標頭
除了通用的要求標頭,UploadPartCopy請求中通過下述要求標頭指定拷貝的源Object地址和拷貝的範圍。
名稱 | 類型 | 描述 |
x-oss-copy-source | 字串 | 拷貝源地址(必須有可讀許可權)。 預設值:無 |
x-oss-copy-source-range | 字串 | 源Object的拷貝範圍。例如設定bytes=0~9,表示拷貝0到9這10個字元。 預設值:無
|
下述請求Header作用於x-oss-copy-source指定的源Object。
名稱 | 類型 | 描述 |
x-oss-copy-source-if-match | 字串 | 如果源Object的ETAG值和使用者提供的ETAG相等,則執行拷貝操作;否則返回412 HTTP錯誤碼(預先處理失敗)。 預設值:無 |
x-oss-copy-source-if-none-match | 字串 | 如果傳入的ETag值和Object的ETag不匹配,則正常傳輸檔案,並返回200 OK;否則返回304 Not Modified。 預設值:無 |
x-oss-copy-source-if-unmodified-since | 字串 | 如果傳入參數中的時間等於或者晚於檔案實際修改時間,則正常傳輸檔案,並返回200 OK;否則返回412 precondition failed錯誤。 預設值:無 |
x-oss-copy-source-if-modified-since | 字串 | 如果指定的時間早於實際修改時間,則正常傳送檔案,並返回200 OK;否則返回304 Not Modified。 預設值:無 時間格式:GMT時間,例如Fri, 13 Nov 2015 14:47:53 GMT |
樣本
請求樣本
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 qn6q**************:77Dv**************** 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-8ff42cd0**** 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>"5B3C1A2E053D763E1B002CC607C5****"</ETag> </CopyPartResult>
指定versionId進行UploadPartCopy的請求樣本
PUT /multipart.data?partNumber=2&uploadId=63C06A5CFF6F4AE4A6BB3AD7F01C**** HTTP/1.1 Host: oss-example.oss-cn-hangzhou.aliyuncs.com Date: Tue, 09 Apr 2019 07:01:56 GMT Authorization: OSS qn6q**************:77Dv**************** x-oss-copy-source: /oss-example/src-object?versionId=CAEQMxiBgMC0vs6D0BYiIGJiZWRjOTRjNTg0NzQ1MTRiN2Y1OTYxMTdkYjQ0****
返回樣本
HTTP/1.1 200 OK Server: AliyunOSS Connection: keep-alive x-oss-copy-source-version-id: CAEQMxiBgMC0vs6D0BYiIGJiZWRjOTRjNTg0NzQ1MTRiN2Y1OTYxMTdkYjQ0**** x-oss-request-id: 5CAC4364B7AEADE017000660 Date: Tue, 09 Apr 2019 07:01:56 GMT <?xml version="1.0" encoding="UTF-8"?> <CopyPartResult> <LastModified>2019-04-09T07:01:56.000Z</LastModified> <ETag>"25A9F4ABFCC05743DF6E2C886C56****"</ETag> </CopyPartResult>
SDK
錯誤碼
錯誤碼 | HTTP狀態代碼 | 描述 |
OperationNotSupported | 400 | Bucket的類型為Archive時調用UploadPartCopy介面。 |