UploadPartCopy
更新时间:2020-08-14
接口描述
在调用InitiateMultipartUpload获取UploadId后,我们需要用UploadPartCopy命令来复制Object拆分后的数据(Part)。为了标识各个Part在Object的相对位置,在UploadPartCopy需要指定一个partNumber参数,partNumber的取值范围是1-10000,即每次三步复制最多可以有10000个part,最少1个part。
说明:
- 每次Copy Part最多可以复制5G bytes的数据。
- 三步复制得到的目的Object的Meta信息,不会从源Object复制而来,需要用户在CompleteMultipartUpload时重新上传,或者完成之后,通过CopyObject接口复制自身来更新Meta。
- UploadPartCopy时,不同的part可能来自不同的Object,系统并不对此进行限制。
- 目前支持跨区域文件复制,即复制文件所在的源Bucket和目标Bucket可以不在同一region(目前只支持从其它Region向本Region复制数据)。当进行跨区域文件复制时,复制产生的流量会收取跨区域流量费。跨区域收费标准参见产品定价。
- 三步复制不适用于Append Object,Append Object可以使用普通复制方法来完成备份和meta更新。
- 如果复制的源Object是归档存储类型的,需要首先调用RestoreObject接口取回归档存储类型的Object。
请求(Request)
-
请求语法
PUT /<ObjectName>?uploadId=UploadId&partNumber=PartNumber HTTP/1.1 Host: <BucketName>.bj.bcebos.com Date: <Date> Authorization: <AuthorizationString> Content-Type: text/plain Content-Length: <ContentLength> x-bce-copy-source: /SrcBucket/SrcObject x-bce-copy-source-range: bytes=0-9
-
请求头域
header 是否必填 描述 x-bce-copy-source 是 复制源文件,比如/SrcBucket/SrcObject x-bce-copy-source-range 否 复制源文件的字节范围,必须使用bytes=first-last的格式,比如bytes=0-9,代表复制前10个字节。如果不提供此header,则复制整个文件,除最后一个part外,其他part需要大于等于5MB,或者是1MB的整数倍,单个part不能超过5GB,但是整个Object的大小不能超过5TB。 x-bce-copy-source-if-match 否 如果源文件的etag值与此header提供的相同,则复制,否则不复制 x-bce-copy-source-if-none-match 否 如果源文件的etag值与此header提供的不相同,则复制,否则不复制 x-bce-copy-source-if-unmodifed-since 否 如果源文件在此header提供的时间后未曾修改,则复制,否则不复制 x-bce-copy-source-if-modifed-since 否 如果源文件在此header提供的时间后曾修改过,则复制,否则不复制 说明:
各字段的格式与CopyObject接口对应字段相同。 假设Object内容为"0123456789",长度为10。x-bce-copy-source-range举例如下:
- range: 0-3,拷贝"0123";
- range: 4-,从下标为4的开始拷贝到文件结束即拷贝"456789";
- range: -4,拷贝末尾4个即"6789"。
-
请求参数
名称 类型 参数位置 描述 是否必需 partNumber Int Query参数 此part在目的Object中的序号。partNum取值范围 1-10000
,一次MultiPart的PartNumber要求必须严格有序,比如有3个Part,PartNumber可以是1,3,5。是 uploadId String Query参数 InitiateMultipartUpload获取的UploadId 是
响应(Response)
-
响应元素
名称 描述 ETag 复制目的Object的ETag lastModified 目的Object的修改时间 注意事项
- UploadPartCopy会返回本次Part的ETag,在MultipartUpload的第三步中需要此ETag,也建议用户用ETag验证上传数据的正确性。
- 为了保持复制过程中的http连接,UploadPartCopy接口的http结果可能使用Transfer-Encoded: Chunked编码方式。
- UploadPartCopy过程中,如果发生服务器端错误,http status code可能返回2XX但是复制失败,复制结果请根据http body中的json判定。
示例
-
请求示例
PUT /ObjectName?uploadId=a44cc9bab11cbd156984767aad637851&partNumber=1 HTTP/1.1 Host: BucketName.bj.bcebos.com Date: <Date> Authorization: <AuthorizationString> Content-Type: text/plain Content-Length: 0 x-bce-copy-source: /SrcBucket/SrcObject x-bce-copy-source-range: bytes=0-9
-
响应示例
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-debug-id: MTAuNjMuMTIzLjI3OlRodSwgMTIgTWF5IDIwMTYgMTc6MTQ6MzIgQ1NUOjg3MjkzODMwMA== x-bce-request-id: bb90cc9c-2b80-462c-87a4-095e610c9a2f Transfer-Encoding: chunked { "lastModified":"2016-05-12T09:14:32Z", "eTag":"67b92a7c2a9b9c1809a6ae3295dcc127" }
拷贝失败, 需要根据返回的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-debug-id: MTAuNjMuMTIzLjI3OlRodSwgMTIgTWF5IDIwMTYgMTc6MTQ6MzIgQ1NUOjg3MjkzODMwMA== 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" }