Skip to content
大纲

CopyObject

接口描述

此接口用于把一个已经存在的Object拷贝为另外一个Object,支持Object文件的长度范围是0Byte-5GB。该接口也可以用来实现Meta更新(使用replace模式且源和目标指向同一个文件)。此接口需要请求者在header中指定拷贝源。

请求(Request)

请求语法

PUT /<BucketName>/<ObjectKey> HTTP/1.1
Host: fos.flymeyun.com
Date: <Date>
Content-Length: <ContentLength>
Content-Type:text/plain
x-fos-copy-source: /SourceBucket/SourceObject
x-fos-copy-source-if-match: 3858f62230ac3c915f300c664312c11f
x-fos-metadata-directive: <DirectiveString>

请求参数

请求头域

x-fos-copy-sourceString源Object地址
x-fos-copy-source-if-matchString如果源Object的ETag值和用户提供的ETag相等,则执行拷贝操作,否则拷贝失败。
x-fos-metadata-directiveString目的Object的Meta信息是从源Object拷贝,还是用请求传入的meta。有效值为copy和replace,缺省值为copy。如果设置为copy,则直接用源Object的meta;如果设置为replace,则用请求传入的meta。
x-fos-meta-*Stringreplace模式下启动,可修改用户自定义meta,自定义meta是用来保存对象的自定义信息。例如设置文件的标签,参数用“x-fos-meta-gender”,值设置为“Male”。
x-fos-copy-source-if-none-matchString如果源Object的ETag和用户提供的ETag不相等,则执行拷贝操作,否则拷贝失败。
x-fos-copy-source-if-unmodified-sinceString如果源object在x-fos-copy-source-if-unmodified-since之后没被修改,则执行拷贝操作,否则拷贝失败。参数取值为GMT格式,例如:Wed, 06 Apr 2016 06:34:40 GMT。
x-fos-copy-source-if-modified-sinceString如果源object在x-fos-copy-source-if-modified-since之后被修改了,则执行拷贝操作,否则拷贝失败。参数取值为GMT格式,例如:Wed, 06 Apr 2016 06:34:40 GMT。

响应(Response)

响应头域

无特殊头域

响应参数

名称类型描述
ETagString目的Object的ETag
lastModifiedDATE目的Object的最后一次修改时间

注意事项

  1. 请求者必须对源Object有读操作权限。
  2. 在计算签名之前,用户需要针对x-fos-copy-source字段中为非标准ASCII字符(例如:中文)的内容做一次url-encode。
  3. 为了保持复制过程中的http连接,CopyObject接口的http结果可能使用Transfer-Encoded: Chunked编码方式。
  4. CopyObject过程中,如果发生服务器端错误,http status code可能返回2XX但是复制失败,复制结果请根据http body中的json判定。

示例

请求示例

PUT /BucketName/ObjectName HTTP/1.1
Host: fos.flymeyun.com
Date: Wed, 06 Apr 2016 06:34:40 GMT
Content-Length: 0
Content-Type:text/plain
x-fos-copy-source: /SourceBucket/SourceObject
x-fos-copy-source-if-match: 3858f62230ac3c915f300c664312c11f
x-fos-metadata-directive: replace
x-fos-meta-mykey: myvalue

响应示例

Copy成功

HTTP/1.1 200 OK
x-fos-request-id: 4db2b34d-654d-4d8a-b49b-3049ca786409
Date: Wed, 06 Apr 2016 06:34:40 GMT
Connection: close

{
    "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
x-fos-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"
}