copy-object用於拷貝同一地區下相同或不同儲存空間(Bucket)之間的檔案(Object)。
注意事項
如果需要恢複Object的早期版本為目前的版本,您只需將Object的早期版本拷貝到同一個Bucket中,OSS會將該Object對應的早期版本置為目前的版本。
如果源Bucket和目標Bucket相同,則Object的大小無限制。如果源Bucket和目標Bucket不同,則建議拷貝小於1 GB的Object。當您需要拷貝大於1 GB的Object時,請使用upload-part-copy。
如果源Object為軟連結,則只拷貝軟連結,無法拷貝軟連結指向的檔案內容。
許可權說明
阿里雲帳號預設擁有全部許可權。阿里雲帳號下的RAM使用者或RAM角色預設沒有任何許可權,需要阿里雲帳號或帳號管理員通過RAM Policy或Bucket Policy授予操作許可權。
API | Action | 說明 |
CopyObject |
| 拷貝同一地區下相同或不同儲存空間(Bucket)之間的檔案(Object)。 |
| ||
| 如果通過versionId指定拷貝的源Object版本,還需要此操作的許可權。 | |
| 如果通過x-oss-tagging拷貝Object的標籤,則需要此操作的許可權。 | |
| ||
| 如果通過versionId指定拷貝的源Object特定版本的Object的標籤,還需要此操作的許可權。 | |
| 拷貝Object時,如果目標Object的中繼資料套件含X-Oss-Server-Side-Encryption: KMS,則需要這兩個許可權。 | |
|
命令格式
ossutil api copy-object --bucket value --key value --copy-source value [flags]參數 | 類型 | 說明 |
--bucket | string | Bucket名稱。 |
--key | string | Object的完整路徑。 |
--forbid-overwrite | string | 指定CopyObject操作時是否覆蓋同名目標Object。 |
--copy-source | string | 拷貝源地址(必須有可讀許可權),其格式為: |
--copy-source-if-match | string | 如果源Object的ETAG值和使用者提供的ETAG相等,則執行拷貝操作;否則返回412 HTTP錯誤碼(預先處理失敗)。 |
--copy-source-if-modified-since | string | 如果指定的時間早於實際修改時間,則正常傳送檔案,並返回200 OK;否則返回304 not modified。 |
--copy-source-if-none-match | string | 如果傳入的ETag值和Object的ETag不匹配,則正常傳輸檔案,並返回200 OK;否則返回304 Not Modified。 |
--copy-source-if-unmodified-since | string | 如果傳入參數中的時間等於或者晚於檔案實際修改時間,則正常傳輸檔案,並返回200 OK;否則返回412 precondition failed錯誤 |
--metadata | stringArray | 指定對象的使用者中繼資料,使用key=value格式,如需要自訂攜帶的中繼資料,需配置以x-oss-meta-*為首碼的參數。 |
--metadata-directive | string | 指定如何設定目標Object的元資訊。 |
--object-acl | string | 指定Object的存取權限。 |
--server-side-encryption | string | 指定伺服器端加密方式。 |
--server-side-encryption-key-id | string | 表示KMS託管的使用者主要金鑰。 |
--storage-class | string | 指定Object的儲存類型。 |
--tagging | string | 指定Object的標籤。 |
--tagging-directive | string | 指定如何設定目標Object的對象標籤。 |
copy-object命令對應API介面CopyObject。關於API中的具體參數含義,請參見CopyObject。
關於支援的全域命令列選項,請參見支援的全域命令列選項。
使用樣本
拷貝
srcBucket儲存空間下的srcObject到examplebucket儲存空間下的exampleobject。ossutil api copy-object --bucket examplebucket --key exampleobject --copy-source /srcBucket/srcObject拷貝
examplebucket儲存空間下的srcObject到exampleobject。ossutil api copy-object --bucket examplebucket --key exampleobject --copy-source /examplebucket/srcObject拷貝
examplebucket儲存空間下的srcObject到exampleobject,以JSON格式顯示。ossutil api copy-object --bucket examplebucket --key exampleobject --copy-source /examplebucket/srcObject --output-format json拷貝
examplebucket儲存空間下的srcObject到exampleobject,以YAML格式顯示。ossutil api copy-object --bucket examplebucket --key exampleobject --copy-source /examplebucket/srcObject --output-format yaml拷貝
examplebucket儲存空間下的srcObject到exampleobject並禁止覆蓋同名目標Object。ossutil api copy-object --bucket examplebucket --key exampleobject --copy-source /examplebucket/srcObject --forbid-overwrite true拷貝
examplebucket儲存空間下的srcObject到exampleobject,如果srcObject的ETag等於123則執行拷貝。ossutil api copy-object --bucket examplebucket --key exampleobject --copy-source /examplebucket/srcObject --copy-source-if-match 123拷貝
examplebucket儲存空間下的srcObject到exampleobject,如果srcObject的修改時間早於 Mon, 11 May 2020 08:16:23 GMT則執行拷貝。ossutil api copy-object --bucket examplebucket --key exampleobject --copy-source /examplebucket/srcObject --copy-source-if-unmodified-since "Mon, 11 May 2020 08:16:23 GMT"拷貝
examplebucket儲存空間下的srcObject到exampleobject,忽略源srcObject的中繼資料,直接採用請求中指定的中繼資料。ossutil api copy-object --bucket examplebucket --key exampleobject --copy-source /examplebucket/srcObject --metadata-directive REPLACE --metadata user=aliyun --metadata email=ali***@aliyuncs.com拷貝
examplebucket儲存空間下的srcObject到exampleobject,忽略源Object的對象標籤,直接採用請求中指定的對象標籤。ossutil api copy-object --bucket examplebucket --key exampleobject --copy-source /examplebucket/srcObject --tagging-directive Replace --tagging "TagA=A&TagB=B"拷貝
examplebucket儲存空間下的srcObject到exampleobject,指定object的存取權限以及儲存類型。ossutil api copy-object --bucket examplebucket --key exampleobject --copy-source /examplebucket/srcObject --object-acl private --storage-class IA