通過在UploadPart請求的基礎上增加一個請求頭x-oss-copy-source來調用UploadPartCopy接口,實現從一個已存在的Object中拷貝數據來上傳一個Part。
注意事項
當拷貝一個大于1 GB的文件時,必須使用UploadPartCopy的方式進行拷貝。如果想通過單個操作拷貝小于1 GB的文件,請參見CopyObject。
使用UploadPartCopy接口時,有如下注意事項:
執行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
當您在OSS ON云盒中調用該接口時,您需要將Host替換為云盒Endpoint。更多信息,請參見云盒Endpoint。
請求頭
除了通用的請求頭,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接口。 |