CopyObject
更新时间:2024-08-07
接口描述
此接口用于把一个已经存在的Object拷贝为另外一个Object,支持Object文件的长度范围是0Byte-5GB。该接口也可以用来实现Meta更新(使用replace模式且源和目标指向同一个文件)。此接口需要请求者在header中指定拷贝源。
CopyObject接口支持跨区域文件复制,即复制文件所在的源Bucket和目标Bucket可以不在同一region(目前只支持从其它Region向本Region复制数据)。当进行跨区域文件复制时,复制产生的流量会收取跨区域流量费。跨区域收费标准参见产品定价。
请求(Request)
-
请求语法
PUT /<ObjectKey> HTTP/1.1 Host: <BucketName>.bj.bcebos.com Date: <Date> Authorization: <AuthorizationString> Content-Length: <ContentLength> Content-Type:text/plain x-bce-copy-source: /SourceBucket/SourceObject x-bce-copy-source-if-match: 3858f62230ac3c915f300c664312c11f x-bce-metadata-directive: <DirectiveString> x-bce-storage-class: <StorageClass>
-
请求参数
无
-
请求头域
名称 类型 描述 是否必需 x-bce-copy-source String 源Object地址 是 x-bce-copy-source-if-match String 如果源Object的ETag值和用户提供的ETag相等,则执行拷贝操作,否则拷贝失败。 否 x-bce-metadata-directive String 目的Object的Meta信息是从源Object拷贝,还是用请求传入的meta。有效值为 copy
和replace
,缺省值为copy
。如果设置为copy
,则直接用源Object的meta;如果设置为replace
,则用请求传入的meta。否 x-bce-meta-* String replace模式下启动,可修改用户自定义meta,自定义meta是用来保存对象的自定义信息。例如设置文件的标签,参数用“x-bce-meta-gender”,值设置为“Male”。 否 x-bce-copy-source-if-none-match String 如果源Object的ETag和用户提供的ETag不相等,则执行拷贝操作,否则拷贝失败。 否 x-bce-copy-source-if-unmodified-since String 如果源object在x-bce-copy-source-if-unmodified-since之后没被修改,则执行拷贝操作,否则拷贝失败。参数取值为GMT格式,例如:Wed, 06 Apr 2016 06:34:40 GMT。 否 x-bce-copy-source-if-modified-since String 如果源object在x-bce-copy-source-if-modified-since之后被修改了,则执行拷贝操作,否则拷贝失败。参数取值为GMT格式,例如:Wed, 06 Apr 2016 06:34:40 GMT。 否 x-bce-storage-class String 指定Object的存储类型, STANDARD_IA
代表低频存储,COLD
代表冷存储,ARCHIVE
代表归档存储,不指定时默认是标准存储类型;如果是多AZ类型bucket,MAZ_STANDARD_IA
代表多AZ低频存储,不指定时默认是MAZ_STANDARD
多AZ标准存储类型,不能是其它取值。否 x-bce-acl String CannedACL支持的header,用户设置Object的权限,取值为private和public-read。 否 x-bce-grant-read String CannedACL支持的header,用户设置Object的读权限。支持多个id,以逗号分隔 否 x-bce-grant-full-control String CannedACL支持的header,用户设置Object的FULL_CONTROL权限。支持多个id,以逗号分隔 否 x-bce-server-side-encryption String 服务端加密算法,当前支持AES256和SM4加密。 否 x-bce-tagging-directive String copy是否携带原Object的对象标签,取值为"Copy"(默认值): 复制源Object的对象标签到目标 Object; "Replace" : 忽略源Object的对象标签 否
响应(Response)
-
响应头域
无特殊头域
-
响应参数
名称 类型 描述 ETag String 目的Object的ETag lastModified DATE 目的Object的最后一次修改时间 注意事项
- 请求者必须对源Object有读操作权限。
- 在计算签名之前,用户需要针对x-bce-copy-source字段中为非标准ASCII字符(例如:中文)的内容做一次url-encode。
- 为了保持复制过程中的http连接,CopyObject接口的http结果可能使用Transfer-Encoded: Chunked编码方式。
- CopyObject过程中,如果发生服务器端错误,http status code可能返回2XX但是复制失败,复制结果请根据http body中的json判定。
- CopyObject如果源object是归档类型,需要先取回归档类型才能调用CopyObject接口。
- 归档类型Object不支持通过CopyObject实现Meta更新(使用replace模式且源和目标指向同一个文件)。
- 如果复制软链接文件,并不会复制数据,只会复制软链接本身。如果使用软链接访问该接口,且软链接的目标文件删除了,会返回Http 404,SymlinkTargetNotExist。
示例
-
标准存储的请求示例
PUT /ObjectName HTTP/1.1 Host: BucketName.bj.bcebos.com Date: Wed, 06 Apr 2016 06:34:40 GMT Authorization: AuthorizationString Content-Length: 0 Content-Type:text/plain x-bce-copy-source: /SourceBucket/SourceObject x-bce-copy-source-if-match: 3858f62230ac3c915f300c664312c11f x-bce-metadata-directive: replace x-bce-meta-mykey: myvalue
-
低频/冷存储的请求示例
PUT /object HTTP/1.1 Host: BucketName.bj.bcebos.com Date: Wed, 06 Apr 2016 06:34:40 GMT Authorization: AuthorizationString Content-Length: 0 Content-Type:text/plain x-bce-copy-source: /SourceBucket/SourceObject x-bce-copy-source-if-match: 3858f62230ac3c915f300c664312c11f x-bce-storage-class: STANDARD_IA
-
响应示例
Copy成功
HTTP/1.1 200 OK x-bce-request-id: 4db2b34d-654d-4d8a-b49b-3049ca786409 Date: Wed, 06 Apr 2016 06:34:40 GMT Connection: close Server: BceBos { "lastModified":"2009-10-28T22:32:00Z", "ETag":"9b2cf535f27731c974343645a3985328" }
服务端异常, 需要根据返回json判断
HTTP/1.1 200 OK Date: Thu, 12 May 2016 09:14:32 GMT Content-Type: application/json; charset=utf-8 Connection: keep-alive Server: BceBos x-bce-request-id: bb90cc9c-2b80-462c-87a4-095e610c9a2f Transfer-Encoding: chunked { "code":"InternalError", "message":"We encountered an internal error. Please try again.", "requestId":"52454655-5345-4420-4259-204e47494e58" }