CopyObject
調(diào)用CopyObject接口拷貝同一地域下相同或不同存儲空間(Bucket)之間的文件(Object)。
版本控制
x-oss-copy-source
默認拷貝Object的當前版本,您可以在x-oss-copy-source
中加入versionId來拷貝指定的Object版本。拷貝Object時,如果源Object的對應(yīng)版本為刪除標記,則返回404表示該Object不存在。
如果需要恢復(fù)Object的早期版本為當前版本,您只需將Object的早期版本拷貝到同一個Bucket中,OSS會將該Object對應(yīng)早期版本置為當前版本。
如果目標Bucket已開啟版本控制,OSS將會為新拷貝的Object自動生成唯一的版本ID,此版本ID將會在響應(yīng)Header中的x-oss-version-id
返回。如果目標Bucket未開啟或者暫停了版本控制,OSS將會為新拷貝的Object自動生成version ID為null的版本,且會覆蓋原有versionId為null的版本。
使用限制
Object大小限制
如果源Bucket和目標Bucket相同,且通過CopyObject拷貝時不修改Object的存儲類型,則Object的大小可以大于5 GB。
如果源Bucket和目標Bucket不同,且通過CopyObject拷貝時不修改Object的存儲類型,則Object的大小不能大于5 GB。
通過CopyObject拷貝時修改Object的存儲類型,則Object的大小不能大于1 GB。如果Object大小超過1 GB,需使用UploadPartCopy接口。
權(quán)限說明
使用CopyObject或UploadPartCopy接口均要求對源Object有讀權(quán)限。
在非版本控制的Bucket中使用CopyObject,且源Object與目標Object為同一個Object時:
拷貝過程中不涉及修改源Object的加密類型或者存儲類型,則OSS只修改源Object的元數(shù)據(jù),不拷貝源Object的內(nèi)容。
拷貝過程中涉及修改源Object的加密類型或者存儲類型,則OSS在修改源Object元數(shù)據(jù)的同時還會拷貝源Object的內(nèi)容。
源Object為軟鏈接
通過CopyObject接口拷貝時,只拷貝軟鏈接,不支持拷貝軟鏈接指向的文件內(nèi)容。
計量計費
調(diào)用一次CopyObject接口只對目標Object所在的Bucket增加一次Put請求次數(shù)。
調(diào)用CopyObject接口會對目標Object所在的Bucket增加相應(yīng)的存儲量。
調(diào)用CopyObject接口更改Object存儲類型會涉及數(shù)據(jù)覆蓋。例如低頻訪問IA創(chuàng)建后10天內(nèi)被覆蓋為標準存儲Standard,則會產(chǎn)生20天的低頻訪問不足規(guī)定時長容量費用。關(guān)于存儲費用的更多信息,請參見存儲費用。
請求語法
PUT /DestObjectName HTTP/1.1
Host: DestBucketName.oss-cn-hangzhou.aliyuncs.com
Date: GMT Date
Authorization: SignatureValue
x-oss-copy-source: /SourceBucketName/SourceObjectName
當您在OSS ON云盒中調(diào)用該接口時,您需要將Host替換為云盒Endpoint。更多信息,請參見云盒Endpoint。
請求頭
拷貝操作涉及到的請求頭均以x-oss-開頭,因此所有請求頭都要加到簽名字符串中。
名稱 | 類型 | 是否必選 | 取值 | 描述 |
x-oss-forbid-overwrite | 字符串 | 否 | true | 指定CopyObject操作時是否覆蓋同名目標Object。當目標Bucket處于已開啟或已暫停版本控制狀態(tài)時,x-oss-forbid-overwrite請求Header設(shè)置無效,即允許覆蓋同名Object。
設(shè)置x-oss-forbid-overwrite請求Header會導(dǎo)致QPS處理性能下降,如果您有大量的操作需要使用x-x-oss-forbid-overwrite請求Header(QPS>1000),請聯(lián)系技術(shù)支持,避免影響您的業(yè)務(wù)。 默認值:false |
x-oss-copy-source | 字符串 | 是 | /oss-example/oss.jpg | 指定拷貝的源地址。 默認值:無 |
x-oss-copy-source-if-match | 字符串 | 否 | 5B3C1A2E053D763E1B002CC607C5**** | 如果源Object的ETag值和您提供的ETag相等,則執(zhí)行拷貝操作,并返回200 OK。 默認值:無 |
x-oss-copy-source-if-none-match | 字符串 | 否 | 5B3C1A2E053D763E1B002CC607C5**** | 如果源Object的ETag值和您提供的ETag不相等,則執(zhí)行拷貝操作,并返回200 OK。 默認值:無 |
x-oss-copy-source-if-unmodified-since | 字符串 | 否 | Mon, 11 May 2020 08:16:23 GMT | 如果指定的時間等于或者晚于文件實際修改時間,則正??截愇募?,并返回200 OK。 默認值:無 |
x-oss-copy-source-if-modified-since | 字符串 | 否 | Mon, 11 May 2020 08:16:23 GMT | 如果指定的時間早于文件實際修改時間,則正??截愇募⒎祷?span id="z68uejxpaoma" class="help-letter-space">200 OK。 默認值:無 |
x-oss-metadata-directive | 字符串 | 否 | COPY | 指定如何設(shè)置目標Object的元數(shù)據(jù)。
重要 如果拷貝操作的源Object地址和目標Object地址相同,且未開啟版本控制時,則無論x-oss-metadata-directive為何值,都會忽略源Object的元數(shù)據(jù),目標Object將直接采用請求中指定的元數(shù)據(jù)。 |
x-oss-server-side-encryption | 字符串 | 否 | AES256 | 指定OSS創(chuàng)建目標Object時,服務(wù)器端使用熵編碼加密算法 。 取值:AES256 、KMS 說明 在OSS ON云盒使用場景中,僅支持AES256。 您只有購買了KMS套件,才能使用KMS加密算法,否則OSS會返回KmsServiceNotEnabled錯誤。
|
x-oss-server-side-encryption-key-id | 字符串 | 否 | 9468da86-3509-4f8d-a61e-6eab1eac**** | 表示KMS托管的用戶主密鑰。 該參數(shù)僅在x-oss-server-side-encryption為KMS時有效。 說明 在OSS ON云盒使用場景中,不支持使用此選項。 |
x-oss-object-acl | 字符串 | 否 | private | 指定OSS創(chuàng)建目標Object時的訪問權(quán)限。 取值:
關(guān)于訪問權(quán)限的更多信息,請參見設(shè)置Object ACL。 |
x-oss-storage-class | 字符串 | 否 | Standard | 指定Object的存儲類型。 對于任意存儲類型Bucket,如果上傳Object時指定該值,則此次上傳的Object將存儲為指定的類型。例如在IA類型的Bucket中上傳Object時,如果指定x-oss-storage-class為Standard,則該Object直接存儲為Standard類型。 取值:
關(guān)于存儲類型的更多信息,請參見存儲類型概述。 |
x-oss-tagging | 字符串 | 否 | a:1 | 指定Object的對象標簽,可同時設(shè)置多個標簽,例如TagA=A&TagB=B。 說明 Key和Value需要先進行URL編碼,如果某項沒有“=”,則看作Value為空字符串。 |
x-oss-tagging-directive | 字符串 | 否 | Copy | 指定如何設(shè)置目標Object的對象標簽。取值如下:
|
此接口還需要包含Host、Date等公共請求頭。更多信息,請參見公共請求頭(Common Request Headers)。
響應(yīng)頭
此接口僅包含公共響應(yīng)頭。更多信息,請參見公共響應(yīng)頭(Common Response Headers)。
響應(yīng)元素
名稱 | 類型 | 示例值 | 描述 |
CopyObjectResult | 容器 | 不涉及 | 保存CopyObject的結(jié)果。 默認值:無 |
ETag | 字符串 | 5B3C1A2E053D763E1B002CC607C5**** | 目標Object的ETag值。 父元素:CopyObjectResult |
LastModified | 字符串 | Fri, 24 Feb 2012 07:18:48 GMT | 目標Object最后更新時間。 父元素:CopyObjectResult |
示例
未開啟版本控制
請求示例
PUT /test%2FAK.txt HTTP/1.1 Host: tesx.oss-cn-zhangjiakou.aliyuncs.com Accept-Encoding: identity User-Agent: aliyun-sdk-python/2.6.0(Windows/7/AMD64;3.7.0) Accept: text/html Connection: keep-alive x-oss-copy-source: /test/AK.txt date: Fri, 28 Dec 2018 09:41:55 GMT authorization: OSS qn6qrrqxo2oawuk53otfjbyc:gmnwPKuu20LQEjd+iPkL259A**** Content-Length: 0
返回示例
x-oss-hash-crc64ecma
表示Object的64位CRC值。該64位CRC值根據(jù)ECMA-182標準計算得出。進行CopyObject操作時,生成的Object不保證具有64位CRC值。HTTP/1.1 200 OK Server: AliyunOSS Date: Fri, 28 Dec 2018 09:41:56 GMT Content-Type: application/xml Content-Length: 184 Connection: keep-alive x-oss-request-id: 5C25EFE4462CE00EC6D87156 ETag: "F2064A169EE92E9775EE5324D0B1****" x-oss-hash-crc64ecma: 12753002859196105360 x-oss-server-time: 150 <?xml version="1.0" encoding="UTF-8"?> <CopyObjectResult> <ETag>"F2064A169EE92E9775EE5324D0B1****"</ETag> <LastModified>2018-12-28T09:41:56.000Z</LastModified> </CopyObjectResult>
未指定versionId進行拷貝
請求示例
PUT /dest-object-example HTTP/1.1 Host: versioning-copy.oss-cn-hangzhou.aliyuncs.com Date: Tue, 09 Apr 2019 03:45:32 GMT Authorization: OSS qn6q**************:77Dv**************** x-oss-copy-source: /versioning-copy-source/source-object
返回示例
示例中的
x-oss-copy-source-version-id
為源拷貝Object的versionId,在該示例中即為源拷貝Object的當前版本。x-oss-version-id
為新拷貝生成Object的versionId。HTTP/1.1 200 OK x-oss-copy-source-version-id: CAEQNRiBgIC28uaA0BYiIDY5OGIwNmNlNjYyMTRjNTc4N2M2OGNiMjZkZTQ2**** x-oss-version-id: CAEQNxiBgIDG8uaA0BYiIGZhZDRkZTk5Zjg3YzRhNzdiMWEwZGViNDM1NTFh**** x-oss-request-id: 5CAC155CB7AEADE01700**** Content-Type: application/xml Content-Length: 184 Connection: keep-alive Date: Tue, 09 Apr 2019 03:45:32 GMT Server: AliyunOSS <?xml version="1.0" encoding="UTF-8"?> <CopyObjectResult> <ETag>"C81E728D9D4C2F636F067F89CC14****"</ETag> <LastModified>2019-04-09T03:45:32.000Z</LastModified> </CopyObjectResult>
指定versionId進行拷貝
請求示例
PUT /dest-object-example HTTP/1.1 Host: versioning-copy.oss-cn-hangzhou.aliyuncs.com Date: Tue, 09 Apr 2019 03:45:32 GMT Authorization: OSS qn6q**************:77Dv**************** x-oss-copy-source: /versioning-copy-source/source-object?versionId=CAEQNRiBgICv8uaA0BYiIDliZDc3MTc1NjE5MjRkMDI4ZGU4MTZkYjY1ZDgy****
返回示例
示例中的
x-oss-copy-source-version-id
為源拷貝Object的versionId,在該示例中即為x-oss-copy-source
中versionId指定的版本,x-oss-version-id
為新拷貝生成Object的versionId。HTTP/1.1 200 OK x-oss-copy-source-version-id: CAEQNRiBgICv8uaA0BYiIDliZDc3MTc1NjE5MjRkMDI4ZGU4MTZkYjY1ZDgy**** x-oss-version-id: CAEQNxiBgMDP8uaA0BYiIDIyNGNhZDQ1M2M3NzRkZThiNzE0N2I3ZDkxOWY4**** x-oss-request-id: 5CAC155CB7AEADE01700**** Content-Type: application/xml Content-Length: 184 Connection: keep-alive Date: Tue, 09 Apr 2019 03:45:32 GMT Server: AliyunOSS <?xml version="1.0" encoding="UTF-8"?> <CopyObjectResult> <ETag>"C4CA4238A0B923820DCC509A6F75****"</ETag> <LastModified>2019-04-09T03:45:32.000Z</LastModified> </CopyObjectResult>
SDK
此接口所對應(yīng)的各語言SDK如下:
錯誤碼
錯誤碼 | HTTP狀態(tài)碼 | 描述 |
InvalidArgument | 400 | x-oss-storage-class等參數(shù)的值無效。 |
Precondition Failed | 412 | 返回該錯誤的可能原因如下:
|
Not Modified | 304 | 返回該錯誤的可能原因如下:
|
KmsServiceNotEnabled | 403 | 將x-oss-server-side-encryption指定為KMS,但沒有預(yù)先購買KMS套件。 |
FileAlreadyExists | 409 | 當請求的Header中攜帶x-oss-forbid-overwrite=true時,表示禁止覆蓋同名文件。如果文件已存在,則返回該錯誤。 |
FileImmutable | 409 | Bucket內(nèi)的數(shù)據(jù)處于被保護狀態(tài)時,如果嘗試刪除或修改這些數(shù)據(jù),則返回該錯誤。 |
常見問題
CopyObject是否支持批量復(fù)制文件?
不支持。CopyObject用于復(fù)制單個文件。如果需要批量復(fù)制文件,您可以使用ossutil工具。更多信息,請參見cp(拷貝文件)。