全部產品
Search
文件中心

Object Storage Service:UploadPartCopy介面

更新時間:Dec 21, 2024

通過在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

要求標頭

除了通用的要求標頭,UploadPartCopy請求中通過下述要求標頭指定拷貝的源Object地址和拷貝的範圍。

名稱

類型

描述

x-oss-copy-source

字串

拷貝源地址(必須有可讀許可權)。

預設值:無

x-oss-copy-source-range

字串

源Object的拷貝範圍。例如設定bytes=0~9,表示拷貝0到9這10個字元。

預設值:無

  • 不指定該要求標頭時,表示拷貝整個源Object。

  • 當指定該要求標頭時,則返回訊息中會包含整個檔案的長度和此次拷貝的範圍,例如:Content-Range: bytes 0~9/44,表示整個檔案長度為44,此次拷貝的範圍為0~9。

  • 當指定的範圍不符合規範時,則拷貝整個源Object,並且不在結果中提及Content-Range。

下述請求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

此介面所對應的各語言SDK如下:

錯誤碼

錯誤碼

HTTP狀態代碼

描述

OperationNotSupported

400

Bucket的類型為Archive時調用UploadPartCopy介面。