拷贝段
功能介绍
多段上传任务创建后,用户可以通过指定多段上传任务号,为特定的任务上传段。添加段的方式还包括调用段拷贝接口。允许客户将已上传对象的一部分或全部拷贝为段。

拷贝段的结果不能仅根据HTTP返回头域中的status_code来判断请求是否成功,头域中status_code返回200时表示服务端已经收到请求,且开始处理拷贝段请求。拷贝是否成功会在响应消息的body中,只有body体中有ETag标签才表示成功,否则表示拷贝失败。
将源对象object拷贝为一个段part1,如果在拷贝操作之前part1已经存在,拷贝操作执行之后老段数据part1会被新拷贝的段数据覆盖。拷贝成功后,只能列举到最新的段part1,老段数据将会被删除。因此在使用拷贝段接口时请确保目标段不存在或者已无价值,避免因拷贝段导致数据误删除。拷贝过程中源对象object无任何变化。
请求消息样式
PUT /ObjectName?partNumber=partNum&uploadId=UploadID HTTP/1.1 Host: bucketname.obs.region.example.com Date: date x-obs-copy-source: sourceobject x-obs-copy-source-range:bytes=start-end Authorization: authorization Content-Length: length
请求消息参数
拷贝段需要在参数中指定目标段的段号和多段上传任务号,参数的具体意义如表1所示。
请求消息头
该请求的除了使用公共消息头外,还使用了两个扩展的消息头。公共消息头如表3所示。
消息头名称 |
描述 |
是否必选 |
---|---|---|
x-obs-copy-source |
拷贝的源对象。 类型:String |
是 |
x-obs-copy-source-range |
源对象中待拷贝的段的字节范围(start - end),start为段起始字节,end为段结束字节。 类型:Integer |
否 |
x-obs-copy-source-if-match |
只有当源对象的Etag与此参数指定的值相等时才进行复制对象操作,否则返回412(前置条件不满足)。 类型:String 示例:x-obs-copy-source-if-match: etag 约束条件:此参数可与x-obs-copy-source-if-unmodified-since一起使用,但不能与其它条件复制参数一起使用。 |
否 |
x-obs-copy-source-if-none-match |
只有当源对象的Etag与此参数指定的值不相等时才进行复制对象操作,否则返回412(前置条件不满足)。 类型:String 示例:x-obs-copy-source-if-none-match: etag 约束条件:此参数可与x-obs-copy-source-if-modified-since一起使用,但不能与其它条件复制参数一起使用。 |
否 |
x-obs-copy-source-if-unmodified-since |
只有当源对象在此参数指定的时间之后没有修改过才进行复制对象操作,否则返回412(前置条件不满足),此参数可与x-obs-copy-source-if-match一起使用,但不能与其它条件复制参数一起使用。 类型:String 格式:符合http://www.ietf.org/rfc/rfc2616.txt规定格式的HTTP时间字符串。
对应示例:
约束条件:此参数指定的时间不能晚于当前的服务器时间(GMT时间),否则参数不生效。 |
否 |
x-obs-copy-source-if-modified-since |
只有当源对象在此参数指定的时间之后修改过才进行复制对象操作,否则返回412(前置条件不满足),此参数可与x-obs-copy-source-if-none-match一起使用,但不能与其它条件复制参数一起使用。 类型:String 格式:符合http://www.ietf.org/rfc/rfc2616.txt规定格式的HTTP时间字符串。
对应示例:
约束条件:此参数指定的时间不能晚于当前的服务器时间(GMT时间),否则参数不生效。 |
否 |
请求消息元素
该请求消息中不使用消息元素。
响应消息样式
HTTP/1.1 status_code Date: date <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <CopyPartResult xmlns="http://obs.region.example.com/doc/2015-06-30/"> <LastModified>modifiedDate</LastModified> <ETag>etag</ETag> </CopyPartResult>
响应消息头
该请求的响应消息使用公共消息头,具体请参考表1。
响应消息元素
该请求的响应消息使用消息元素来返回段拷贝的结果,元素的意义如表3所示。
错误响应消息
- 如果AccessKey或签名无效,OBS返回403 Forbidden,错误码为AccessDenied。
- 查询源桶或目的桶是否存在,如果不存在,OBS返回404 Not Found,错误码为NoSuchBucket。
- 如果源对象不存在,OBS返回404 Not Found,错误码为NoSuchKey。
- 如果用户对指定对象没有读权限,OBS返回403 Forbidden,错误码为AccessDenied。
- 如果用户对目的桶没有写权限,OBS返回403 Forbidden,错误码为AccessDenied。
- 查询指定的任务不存在,OBS返回404 Not Found,错误码为NoSuchUpload。
- 如果用户不是多段上传任务的发起者,OBS返回403 Forbidden,错误码为AccessDenied。
- 当拷贝的单段超过5G时,OBS返回400 Bad Request。
- 如果段序号超过范围[1,10000],OBS返回错误400 Bad Request。
其他错误已包含在表2中。
请求示例
PUT /tobject02?partNumber=2&uploadId=00000163D40171ED8DF4050919BD02B8 HTTP/1.1 User-Agent: curl/7.29.0 Host: examplebucket.obs.region.example.com Accept: */* Date: WED, 01 Jul 2015 05:16:32 GMT Authorization: OBS H4IPJX0TQTHTHEBQQCEC:dSnpnNpawDSsLg/xXxaqFzrAmMw= x-obs-copy-source: /destbucket/object01
响应示例
1 2 3 4 5 6 7 8 9 10 11 12 13 |
HTTP/1.1 200 OK Server: OBS x-obs-request-id: 8DF400000163D40ABBD20405D30B0542 x-obs-id-2: 32AAAQAAEAABAAAQAAEAABAAAQAAEAABCTIJpD2efLy5o8sTTComwBb2He0j11Ne Content-Type: application/xml Date: WED, 01 Jul 2015 05:16:32 GMT Transfer-Encoding: chunked <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <CopyPartResult xmlns="http://obs.example.com/doc/2015-06-30/"> <LastModified>2015-07-01T05:16:32.344Z</LastModified> <ETag>"3b46eaf02d3b6b1206078bb86a7b7013"</ETag> </CopyPartResult> |