484
搜狐
CopyObject__關於Object操作_API 參考_對象存儲 OSS-阿裏雲
拷貝一個在OSS上已經存在的object成另外一個object,可以發送一個PUT請求給OSS,並在PUT請求頭中添加元素“x-oss-copy-source”來指定拷貝源。OSS會自動判斷出這是一個Copy操作,並直接在服務器端執行該操作。如果拷貝成功,則返回新的object信息給用戶。該操作適用於拷貝小於1GB的文件,當拷貝一個大於1GB的文件時,必須使用Multipart Upload操作,具體見Upload Part Copy。
請求語法
PUT /DestObjectName HTTP/1.1
Host: DestBucketName.oss-cn-hangzhou.aliyuncs.com
Date: GMT Date
Authorization: SignatureValue
x-oss-copy-source: /SourceBucketName/SourceObjectName
請求Header
名稱 | 描述 |
---|---|
x-oss-copy-source | 複製源地址(必須有可讀權限) 類型:字符串 默認值:無 |
x-oss-copy-source-if-match | 如果源Object的ETag值和用戶提供的ETag相等,則執行拷貝操作,並返回200;否則返回412 HTTP錯誤碼(預處理失敗)。 類型:字符串 默認值:無 |
x-oss-copy-source-if-none-match | 如果源Object的ETag值和用戶提供的ETag不相等,則執行拷貝操作,並返回200;否則返回304 HTTP錯誤碼(預處理失敗)。 類型:字符串 默認值:無 |
x-oss-copy-source-if-unmodified-since | 如果傳入參數中的時間等於或者晚於文件實際修改時間,則正常傳輸文件,並返回200 OK;否則返回412 precondition failed錯誤。 類型:字符串 默認值:無 |
x-oss-copy-source-if-modified-since | 如果源Object自從用戶指定的時間以後被修改過,則執行拷貝操作;否則返回304 HTTP錯誤碼(預處理失敗)。 類型:字符串 默認值:無 |
x-oss-metadata-directive | 有效值為COPY和REPLACE。如果該值設為COPY,則新的Object的meta都從源Object複製過來;如果設為REPLACE,則忽視所有源Object的meta值,而采用用戶這次請求中指定的meta值;其他值則返回400 HTTP錯誤碼。注意該值為COPY時,源Object的x-oss-server-side-encryption的meta值不會進行拷貝。 類型:字符串 默認值:COPY 有效值:COPY、REPLACE |
x-oss-server-side-encryption | 指定oss創建目標object時的服務器端熵編碼加密算法 類型:字符串 有效值:AES256 |
x-oss-object-acl | 指定oss創建object時的訪問權限。 類型:字符串 合法值:public-read,private,public-read-write |
響應元素(Response Elements)
名稱 | 描述 |
---|---|
CopyObjectResult | Copy Object結果 類型:字符串 默認值:無 |
ETag | 新Object的ETag值。 類型:字符串 父元素:CopyObjectResult |
LastModified | 新Object最後更新時間。 類型:字符串 父元素:CopyObjectResult |
細節分析
- 可以通過拷貝操作來實現修改已有Object的meta信息。
- 如果拷貝操作的源Object地址和目標Object地址相同,則無論x-oss-metadata-directive為何值,都會直接替換源Object的meta信息。
- OSS支持拷貝操作的四個預判斷Header任意個同時出現,相應邏輯參見Get Object操作的細節分析。
- 拷貝操作需要請求者對源Object有讀權限。
- 源Object和目標Object必須屬於同一個數據中心,否則返回403 AccessDenied,錯誤信息為:Target object does not reside in the same data center as source object。
- 拷貝操作的計費統計會對源Object所在的Bucket增加一次Get請求次數,並對目標Object所在的Bucket增加一次Put請求次數,以及相應的新增存儲空間。
- 拷貝操作涉及到的請求頭,都是以“x-oss-”開頭的,所以要加入簽名字符串中。
- 若在拷貝操作中指定了x-oss-server-side-encryption請求頭,並且請求值合法(為AES256),則無論源Object是否進行過服務器端加密編碼,拷貝之後的目標Object都會進行服務器端加密編碼。並且拷貝操作的響應頭中會包含x-oss-server-side-encryption,值被設置成目標Object的加密算法。在這個目標Object被下載時,響應頭中也會包含x-oss-server-side-encryption,值被設置成該Object的加密算法;若拷貝操作中未指定x-oss-server-side-encryption請求頭,則無論源Object是否進行過服務器端加密編碼,拷貝之後的目標Object都是未進行過服務器端加密編碼加密的數據。
- 拷貝操作中x-oss-metadata-directive請求頭為COPY(默認值)時,並不拷貝源Object的x-oss-server-side-encryption值,即目標Object是否進行服務器端加密編碼隻根據COPY操作是否指定了x-oss-server-side-encryption請求頭來決定。
- 若在拷貝操作中指定了x-oss-server-side-encryption請求頭,並且請求值非AES256,則返回400和相應的錯誤提示:InvalidEncryptionAlgorithmError。
- 如果拷貝的文件大小大於1GB,會返回400和錯誤提示:EntityTooLarge。
- 該操作不能拷貝通過Append追加上傳方式產生的object。
- 如果文件類型為符號鏈接,隻拷貝符號鏈接。
示例
請求示例:
PUT /copy_oss.jpg HTTP/1.1
Host: oss-example.oss-cn-hangzhou.aliyuncs.com
Date: Fri, 24 Feb 2012 07:18:48 GMT
x-oss-copy-source: /oss-example/oss.jpg
Authorization: OSS qn6qrrqxo2oawuk53otfjbyc:gmnwPKuu20LQEjd+iPkL259A+n0=
返回示例:
HTTP/1.1 200 OK
x-oss-request-id: 559CC9BDC755F95A64485981
Content-Type: application/xml
Content-Length: 193
Connection: keep-alive
Date: Fri, 24 Feb 2012 07:18:48 GMT
Server: AliyunOSS
<?xml version="1.0" encoding="UTF-8"?>
<CopyObjectResult xmlns=”https://doc.oss-cn-hangzhou.aliyuncs.com”>
<LastModified>Fri, 24 Feb 2012 07:18:48 GMT</LastModified>
<ETag>"5B3C1A2E053D763E1B002CC607C5A0FE"</ETag>
</CopyObjectResult>
最後更新:2016-11-23 17:16:08
上一篇:
PutObject__關於Object操作_API 參考_對象存儲 OSS-阿裏雲
下一篇:
GetObject__關於Object操作_API 參考_對象存儲 OSS-阿裏雲
常見錯誤說明__附錄_大數據計算服務-阿裏雲
發送短信接口__API使用手冊_短信服務-阿裏雲
接口文檔__Android_安全組件教程_移動安全-阿裏雲
運營商錯誤碼(聯通)__常見問題_短信服務-阿裏雲
設置短信模板__使用手冊_短信服務-阿裏雲
OSS 權限問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
消息通知__操作指南_批量計算-阿裏雲
設備端快速接入(MQTT)__快速開始_阿裏雲物聯網套件-阿裏雲
查詢API調用流量數據__API管理相關接口_API_API 網關-阿裏雲
使用STS訪問__JavaScript-SDK_SDK 參考_對象存儲 OSS-阿裏雲