華為云計算 云知識 復制對象CopyObject
復制對象CopyObject

 

接口說明

復制對象(Copy Object)特性用來為OBS上已經(jīng)存在的對象創(chuàng)建一個副本。

當進行復制對象操作時,目標對象默認復制源對象的元數(shù)據(jù);用戶也可以將目標對象的元數(shù)據(jù)替換為本次請求中所帶的元數(shù)據(jù)。新建的目標對象不會復制源對象的ACL信息,默認的新建對象的ACL是private,用戶可以使用設置ACL的操作接口來重新設定新對象的ACL。

復制對象操作的請求需要通過頭域攜帶拷貝的原桶和對象信息,不能攜帶消息實體。

該操作支持服務端加密功能。

目標對象大小范圍是[0, 5GB],如果源對象大小超過5GB,只能使用Range拷貝部分對象。

多版本

默認情況下,x-obs-copy-source標識復制源對象的最新版本。如果源對象的最新版本是刪除標記,則認為該對象已刪除。要復制指定版本的對象,可以在x-obs-copy-source請求消息頭中攜帶versionId參數(shù)。

如果目標對象的桶的多版本狀態(tài)是開啟的,系統(tǒng)為目標對象生成唯一的版本號(此版本號與源對象的版本號不同),并且會在響應報頭x-obs-version-id返回該版本號。如果目標對象的桶的多版本狀態(tài)是暫停的,則目標對象的版本號為null。

須知: 在桶沒有開啟多版本的情況下,將源對象object_A復制為目標對象object_B,如果在復制操作之前對象object_B已經(jīng)存在,復制操作執(zhí)行之后老對象object_B則會被新復制對象object_B覆蓋,復制成功后,只能下載到新的對象object_B,老對象object_B將會被刪除。因此在使用copy接口時請確保目標對象不存在或者已無價值,避免因copy導致數(shù)據(jù)誤刪除。復制過程中源對象object_A無任何變化。

復制對象的結(jié)果不能僅根據(jù)HTTP返回頭域中的status_code來判斷請求是否成功,頭域中status_code返回200時表示服務端已經(jīng)收到請求,且開始處理復制對象請求。復制是否成功會在響應消息的body中,只有body體中有ETag標簽才表示成功,否則表示復制失敗。

歸檔存儲對象

如果源對象是歸檔存儲對象,需要判斷源對象的取回狀態(tài),只有當源對象處于已取回狀態(tài)時,才能復制成功。源對象未取回或者正在取回時,會復制失敗,返回錯誤403 Forbidden。異常描述為:

ErrorCode: InvalidObjectState

ErrorMessage: Operation is not valid for the source object's storage class

URL
PUT  https://obs.cn-north-4.myhuaweicloud.com/{object_key} 
請求參數(shù)
名稱 類型 IN 必選 描述
Authorization
 
string header

請求消息中可帶的簽名信息。

Date
 
string header

請求發(fā)起端的日期和時間,例如:Wed, 27 Jun 2018 13:39:15 +0000。 默認值:無。 條件:如果消息頭中帶了x-obs-date字段,則可以不帶該字段,其他情況下必選。

x-obs-acl
 
string header

復制對象時,可以加上此消息頭設置對象的權(quán)限控制策略,使用的策略為預定義的常用策略,包括:private;public-read;public-read-write(各策略詳細說明見ACL章節(jié)的“使用頭域設置ACL”)。 示例:x-obs-acl: acl

x-obs-grant-read
 
string header

創(chuàng)建對象時,使用此頭域授權(quán)domain下所有用戶有讀對象和獲取對象元數(shù)據(jù)的權(quán)限

x-obs-grant-read-acp
 
string header

創(chuàng)建對象時,使用此頭域授權(quán)domain下所有用戶有獲取對象ACL的權(quán)限。

x-obs-grant-write-acp
 
string header

創(chuàng)建對象時,使用此頭域授權(quán)domain下所有用戶有寫對象ACL的權(quán)限。

x-obs-grant-full-control
 
string header

創(chuàng)建對象時,使用此頭域授權(quán)domain下所有用戶有讀對象、獲取對象元數(shù)據(jù)、獲取對象ACL、寫對象ACL的權(quán)限。

x-obs-copy-source
 
string header

用來指定復制對象操作的源桶名以及源對象名。當源對象存在多個版本時,通過versionId參數(shù)指定版本源對象。 約束:中文字符,需要進行URLEncode 示例:x-obs-copy-source: /source_bucket/sourceObject

x-obs-metadata-directive
 
string header

此參數(shù)用來指定新對象的元數(shù)據(jù)是從源對象中復制,還是用請求中的元數(shù)據(jù)替換。

有效取值:COPY或REPLACE。

默認值:COPY。

示例:x-obs-metadata-directive: metadata_directive

約束條件:如果此參數(shù)的值不是COPY或REPLACE,則OBS立即返回400錯誤;如果用戶進行修改元數(shù)據(jù)操作(源對象與目標對象相同),則此參數(shù)只能為REPLACE,否則此請求作為無效請求,服務端響應400。此參數(shù)不支持將加密的對象更改成非加密對象(源對象與目標對象相同)。如果用戶使用此參數(shù)更改加密的對象,系統(tǒng)將返回400。

x-obs-copy-source-if-match
 
string header

只有當源對象的Etag與此參數(shù)指定的值相等時才進行復制對象操作,否則返回412(前置條件不滿足)。

示例:x-obs-copy-source-if-match: etag

約束條件:此參數(shù)可與x-obs-copy-source-if-unmodified-since一起使用,但不能與其它條件復制參數(shù)一起使用。

x-obs-copy-source-if-none-match
 
string header

只有當源對象的Etag與此參數(shù)指定的值不相等時才進行復制對象操作,否則返回412(前置條件不滿足)。

示例:x-obs-copy-source-if-none-match: etag

約束條件:此參數(shù)可與x-obs-copy-source-if-modified-since一起使用,但不能與其它條件復制參數(shù)一起使用。

x-obs-copy-source-if-unmodified-since
 
string header

只有當源對象在此參數(shù)指定的時間之后沒有修改過才進行復制對象操作,否則返回412(前置條件不滿足),此參數(shù)可與x-obs-copy-source-if-match一起使用,但不能與其它條件復制參數(shù)一起使用。

類型:符合http://www.ietf.org/rfc/rfc2616.txt規(guī)定格式的HTTP時間字符串。

示例:x-obs-copy-source-if-unmodified -since: time-sta

x-obs-copy-source-if-modified-since
 
string header

只有當源對象在此參數(shù)指定的時間之后修改過才進行復制對象操作,否則返回412(前置條件不滿足),此參數(shù)可與x-obs-copy-source-if-none-match一起使用,但不能與其它條件復制參數(shù)一起使用。

類型:符合http://www.ietf.org/rfc/rfc2616.txt規(guī)定格式的HTTP時間字符串。

示例:x-obs-copy-source-if-modified-since: time-sta

x-obs-storage-class
 
string header

復制對象時,可以加上此頭域設置目的對象的存儲類型。如果未設置此頭域,則以目的對象所在桶的默認存儲類型作為對象的存儲類型。

類型:字符串

說明:存儲類型有3種:STANDARD(標準存儲)、WARM(低頻訪問存儲)、COLD(歸檔存儲)。因此這里可配置的值有:STANDARD、WARM和COLD,注意大小寫敏感。

示例:x-obs-storage-class: STANDARD

x-obs-persistent-headers
 
string header

復制對象時,可以在HTTP請求中加入“x-obs-persistent-headers”消息頭,用來加入一個或多個自定義的響應頭,當用戶獲取目標對象或查詢目標對象元數(shù)據(jù)時,加入的自定義響應頭將會在返回消息的頭域中出現(xiàn)。

類型:字符串。

格式:x-obs-persistent-headers: key1:base64_encode(value1),key2:base64_encode(value2)....

說明:其中key1/key2等為自定義header,若含有非ASCII碼或不可識別字符,可以采用URL編碼或者Base64編碼,服務端只會作為字符串處理,不會做解碼。value1/value2等為對應自定義header的值,base64_encode指做base64編碼,即將自定義header和對應值的base64編碼作為一個key-value對用“:”連接,然后用“,”將所有的key-value對連接起來,放在x-obs-persistent-headers這個header中即可,服務端會對上傳的value做解碼處理。

示例:x-obs-persistent-headers: key1:dmFsdWUx,key2:dmFsdWUy

在下載目標對象或獲取目標對象元數(shù)據(jù)時:返回兩個頭域為“key1:value1”與“key2:value2”

約束:

  1. 通過該方式指定的自定義響應頭不能以“x-obs-”為前綴,比如可以指定“key1”,但是不能指定“x-obs-key1”

  2. 不能指定http標準頭,例如host/content-md5/origin/range/Content-Disposition等

  3. 此頭域和自定義元數(shù)據(jù)總長度不能超過8KB

  4. 如果傳入相同key,將value以“,”拼接后放入同一個key中返回

  5. 如果源對象中已經(jīng)存在自定義響應頭,復制的時候不會拷貝到目標對象中

x-obs-website-redirect-location
 
string header

當桶設置了Website配置,可以將獲取這個對象的請求重定向到桶內(nèi)另一個對象或一個外部的URL,OBS將這個值從頭域中取出,保存在對象的元數(shù)據(jù)中。

類型:字符串

默認值:無

約束:必須以“/”、“http://”或“https://”開頭,長度不超過2K。

x-obs-server-side-encryption
 
string header

使用該頭域表示服務端加密是SSE-KMS方式。目標對象使用SSE-KMS方式加密。

類型:字符串

示例:x-obs-server-side-encryption: kms

當使用SSE-KMS方式時,必選。

x-obs-server-side-encryption-kms-key-id
 
string header

SSE-KMS方式下使用該頭域,該頭域表示加密目標對象使用的主密鑰,如果用戶沒有提供該頭域,那么默認的主密鑰將會被使用。

類型:字符串

支持兩種格式的描述方式:

  1. regionID:domainID(租戶ID):key/key_id

或者

2.key_id

其中regionID是使用密鑰所屬region的ID;domainID是使用密鑰所屬租戶的租戶ID;key_id是從 數(shù)據(jù)加密 服務創(chuàng)建的密鑰ID。

示例:

  1. x-obs-server-side-encryption-kms-key-id: cn-north-4:domainiddomainiddomainiddoma0001:key/4f1cd4de-ab64-4807-920a-47fc42e7f0d0 或者

  2. x-obs-server-side-encryption-kms-key-id: 4f1cd4de-ab64-4807-920a-47fc42e7f0d0

x-obs-server-side-encryption-customer-algorithm
 
string header

SSE-C方式下使用該頭域,該頭域表示加密目標對象使用的算法。

類型:字符串

示例:x-obs-server-side-encryption-customer-algorithm: AES256

約束:需要和x-obs-server-side-encryption-customer-key, x-obs-server-side-encryption-customer-key-MD5一起使用。

當使用SSE-C方式時,必選。

x-obs-server-side-encryption-customer-key
 
string header

SSE-C方式下使用該頭域,該頭域表示加密目標對象使用的密鑰。

類型:字符串

示例:x-obs-server-side-encryption-customer-key:K7QkYpBkM5+hca27fsNkUnNVaobncnLht/rCB2o/9Cw=

約束:該頭域由256-bit的密鑰經(jīng)過base64-encoded得到,需要和x-obs-server-side-encryption-customer-algorithm,x-obs-server-side-encryption-customer-key-MD5一起使用。

當使用SSE-C方式時,必選。

x-obs-server-side-encryption-customer-key-MD5
 
string header

SSE-C方式下使用該頭域,該頭域表示加密目標對象使用的密鑰的MD5值。MD5值用于驗證密鑰傳輸過程中沒有出錯。

類型:字符串

示例:x-obs-server-side-encryption-customer-key-MD5:4XvB3tbNTN+tIEVa0/fGaQ==

約束:該頭域由密鑰的128-bit MD5值經(jīng)過base64-encoded得到,需要和x-obs-server-side-encryption-customer-algorithm,x-obs-server-side-encryption-customer-key一起使用。

當使用SSE-C方式時,必選。

x-obs-copy-source-server-side-encryption-customer-algorithm
 
string header

SSE-C方式下使用該頭域,該頭域表示解密源對象使用的算法。

類型:字符串

示例:x-obs-copy-source-server-side-encryption-customer-algorithm: AES256

約束:需要和x-obs-copy-source-server-side-encryption-customer-key,x-obs-copy-source-server-side-encryption-customer-key-MD5一起使用。

當拷貝源對象使用SSE-C方式時,必選。

x-obs-copy-source-server-side-encryption-customer-key
 
string header

SSE-C方式下使用該頭域,該頭域表示解密源對象使用的密鑰。用于解密源對象。

類型:字符串

示例:x-obs-copy-source-server-side-encryption-customer-key: K7QkYpBkM5+hca27fsNkUnNVaobncnLht/rCB2o/9Cw=

約束:該頭域由256-bit的密鑰經(jīng)過base64-encoded得到,需要和x-obs-copy-source-server-side-encryption-customer-algorithm,x-obs-copy-source-server-side-encryption-customer-key-MD5一起使用。

當拷貝源對象使用SSE-C方式時,必選。

x-obs-copy-source-server-side-encryption-customer-key-MD5
 
string header

SSE-C方式下使用該頭域,該頭域表示解密源對象使用的密鑰的MD5值。MD5值用于驗證密鑰傳輸過程中沒有出錯。

類型:字符串

示例:x-obs-copy-source-server-side-encryption-customer-key-MD5:4XvB3tbNTN+tIEVa0/fGaQ==

約束:該頭域由密鑰的128-bit MD5值經(jīng)過base64-encoded得到,需要和x-obs-copy-source-server-side-encryption-customer-algorithm,x-obs-copy-source-server-side-encryption-customer-key一起使用。

當拷貝源對象使用SSE-C方式時,必選。

success_action_redirect
 
string header

此參數(shù)的值是一個URL,用于指定當此次請求操作成功響應后的重定向的地址。

如果此參數(shù)值有效且操作成功,響應碼為303,Location頭域由此參數(shù)以及桶名、對象名、對象的ETag組成。 如果此參數(shù)值無效,則OBS忽略此參數(shù)的作用,響應碼為204,Location頭域為對象地址。 類型:字符串。

object_key
 
string path

目標對象名稱。

bucket_name
 
string query

請求的桶名稱。

返回參數(shù)
返回碼: 200

請求成功響應消息。

名稱 類型 必選 描述
Content-Length
 
string

響應消息體的字節(jié)長度。

Connection
 
string

指明與服務器的連接是長連接還是短連接。

Date
 
string

OBS系統(tǒng)響應的時間。

ETag
 
string

對象的base64編碼的128位MD5摘要。ETag是對象內(nèi)容的唯一標識,可以通過該值識別對象內(nèi)容是否有變化。比如上傳對象時ETag為A,下載對象時ETag為B,則說明對象內(nèi)容發(fā)生了變化。實際的ETag是對象的哈希值。ETag只反映變化的內(nèi)容,而不是其元數(shù)據(jù)。上傳的對象或拷貝操作創(chuàng)建的對象,通過MD5加密后都有唯一的ETag。如果通過多段上傳對象,則無論加密方法如何,MD5會拆分ETag,此類情況ETag就不是MD5的摘要。

x-obs-id-2
 
string

幫助定位問題的特殊符號。

x-obs-request-id
 
string

由OBS創(chuàng)建來唯一確定本次請求的值,可以通過該值來定位問題。

x-obs-copy-source-version-id
 
string

源對象的版本號。

x-obs-version-id
 
string

目標對象的版本號。

x-obs-server-side-encryption
 
string

如果服務端加密是SSE-KMS方式,響應包含該頭域。

類型:字符串

示例:x-obs-server-side-encryption: kms

x-obs-server-side-encryption-kms-key-id
 
string

如果服務端加密是SSE-KMS方式,響應包含該頭域,該頭域表示主密鑰。

類型:字符串

格式為: regionID:domainID(租戶ID):key/key_id

其中regionID是使用密鑰所屬region的ID;domainID是使用密鑰所屬租戶的租戶ID;key_id是本次加密使用的密鑰ID。

示例: x-obs-server-side-encryption-kms-key-id: cn-north-4:domainiddomainiddomainiddoma0001:key/4f1cd4de-ab64-4807-920a-47fc42e7f0d0

x-obs-server-side-encryption-customer-algorithm
 
string

如果服務端加密是SSE-C方式,響應包含該頭域,該頭域表示加密使用的算法。

類型:字符串

示例:x-obs-server-side-encryption-customer-algorithm: AES256

x-obs-server-side-encryption-customer-key-MD5
 
string

如果服務端加密是SSE-C方式,響應包含該頭域,該頭域表示加密使用的密鑰的MD5值。

類型:字符串

示例:x-obs-server-side-encryption-customer-key-MD5:4XvB3tbNTN+tIEVa0/fGaQ==

x-obs-storage-class
 
string

對象為非標準存儲對象時,會返回此頭域,可取值為:WARM或者COLD

名稱 類型 必選 描述
LastModified
 
string

對象上次修改的時間。

ETag
 
string

新對象的base64編碼的128位MD5摘要。ETag是對象內(nèi)容的唯一標識,可以通過該值識別對象內(nèi)容是否有變化。比如上傳對象時ETag為A,下載對象時ETag為B,則說明對象內(nèi)容發(fā)生了變化。

返回碼: 400

請求失敗響應消息。

名稱 類型 必選 描述
Code
 
string

錯誤響應消息體XML中錯誤響應對應的HTTP消息返回碼,具體的錯誤碼請參見錯誤碼-表2。

Message
 
string

錯誤響應消息體XML中具體錯誤更全面、詳細的英文解釋,具體的錯誤消息請參見錯誤碼-表2

RequestId
 
string

本次錯誤請求的請求ID,用于錯誤定位。

HostId
 
string

返回該消息的服務端ID。

Resource
 
string

該錯誤相關(guān)的桶或?qū)ο筚Y源。

請求示例
示例 1
 
"/destinationObjectName"
 
"PUT /destobject HTTP/1.1\nUser-Agent: curl/7.29.0\nHost: examplebucket.obs.cn-north-4.myhuaweicloud.com\nAccept: */*\nDate: WED, 01 Jul 2015 04:19:21 GMT\nAuthorization: OBS H4IPJX0TQTHTHEBQQCEC:2rZR+iaH8xUewvUKuicLhLHpNoU=\nx-obs-copy-source: /bucket/srcobject\n"
錯誤碼
請參考 錯誤碼說明