UploadPartCopy 接口请求实现将一个已存在对象的内容(或其某个字节范围)作为指定分块上传任务的一个分块。通过
x-cos-copy-source 指定源对象,x-cos-copy-source-range 指定字节范围,以避免在客户端重新下载与上传源对象数据。需先调用 InitiateMultipartUpload 接口获取目标对象的 UploadId,再使用本接口逐块复制源对象内容;分块上传完成后,调用 CompleteMultipartUpload 完成对象合并。注意事项
仅支持同桶拷贝
源对象与目标对象必须位于同一存储桶。当
x-cos-copy-source 中解析出的源存储桶名与请求 Host 中的存储桶名不一致时,请求返回 InvalidCopySource。源对象必须为文件对象
本接口只支持复制文件对象,不支持目录对象。
x-cos-copy-source 中的源对象键末尾为 / 时,请求返回 400 InvalidCopySource。分块编号
partNumber 必须为1到10000之间的整数(包含1和10000)。超出范围将返回 InvalidArgument。各分块允许乱序上传,最终对象内容按分块编号升序拼接。单分块大小限制
单次复制的分块大小不能超过5 GiB,超出时返回
EntityTooLarge。当源对象大于5 GiB 时,必须通过 x-cos-copy-source-range 限定每次复制的字节范围,使每个分块大小不超过5 GiB。分块覆盖
UploadId 有效性
请求
请求语法
PUT /<ObjectKey>?partNumber=<PartNumber>&uploadId=<UploadId> HTTP/1.1Host: <BucketName-APPID>.cosrapid.<Region>.myqcloud.comDate: <GMT Date>x-cos-copy-source: <BucketName-APPID>.cosrapid.<Region>.myqcloud.com/<SourceObjectKey>x-cos-copy-source-range: bytes=<first>-<last> # 可选;不指定时复制整个源对象Content-Length: 0Authorization: <Auth String>
说明:
请求参数
参数名称 | 描述 | 类型 | 是否必选 |
partNumber | 标识本次分块上传的编号,取值范围为 1 到 10000(包含两端) | integer | 是 |
uploadId | string | 是 |
请求头部
Header 名称 | 描述 | 类型 | 是否必选 |
x-cos-copy-source | 源对象的 URL,格式为 <BucketName-APPID>.cosrapid.<Region>.myqcloud.com/<SourceObjectKey>,其中对象键需经过 URL encode。源存储桶必须与目标存储桶相同,否则返回 InvalidCopySource | string | 是 |
x-cos-copy-source-range | 源对象的字节范围,格式为 bytes=<first>-<last>,first 和 last 都是基于 0 开始的偏移量,且必须同时指定,例如 bytes=0-9 表示拷贝源对象的开始 10 个字节。不指定时表示拷贝整个对象。格式不合法时返回 InvalidRange | string | 否 |
请求体
该请求的请求体为空。
响应
响应头部
响应体
响应体为 application/xml 格式:
<?xml version="1.0" encoding="UTF-8"?><CopyPartResult><ETag>string</ETag><LastModified>string</LastModified></CopyPartResult>
具体节点说明:
节点名称 | 父节点 | 描述 | 类型 |
CopyPartResult | 无 | 保存 UploadPartCopy 结果的所有信息 | Container |
ETag | CopyPartResult | string | |
LastModified | CopyPartResult | 本分块的最近一次上传时间,UTC 时区,ISO 8601 格式,秒精度,例如 2019-05-29T04:10:12Z | string |
错误码
实际案例
案例一:复制源对象的部分内容作为一个分块
请求
PUT /exampleobject?partNumber=1&uploadId=1585130821cbb7df1d11846c073ad648e8f33b087cec2381df437acdc833cf654b9ecc6361 HTTP/1.1Host: examplebucket-x--1250000000.cosrapid.ap-guangzhou.myqcloud.comDate: Wed, 29 May 2019 04:10:12 GMTx-cos-copy-source: examplebucket-x--1250000000.cosrapid.ap-guangzhou.myqcloud.com/sourceobjectx-cos-copy-source-range: bytes=0-1048575Content-Length: 0Authorization: q-sign-algorithm=sha1&q-ak=AKIDXXXXXXXX&q-sign-time=1559074212;1559077812&q-key-time=1559074212;1559077812&q-header-list=content-length;date;host;x-cos-copy-source;x-cos-copy-source-range&q-url-param-list=partnumber;uploadid&q-signature=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
响应
HTTP/1.1 200 OKContent-Type: application/xmlConnection: keep-aliveDate: Wed, 29 May 2019 04:10:12 GMTx-cos-request-id: NjUwMDAwMDAwMDAwMDAwMDAw<?xml version="1.0" encoding="UTF-8"?><CopyPartResult><ETag>"39270a968a357d24207e9911162507eb"</ETag><LastModified>2019-05-29T04:10:12Z</LastModified></CopyPartResult>
案例二:复制完整源对象作为一个分块
不指定
x-cos-copy-source-range,表示将整个源对象作为一个分块写入。源对象大小不能超过 5 GiB。请求
PUT /exampleobject?partNumber=2&uploadId=1585130821cbb7df1d11846c073ad648e8f33b087cec2381df437acdc833cf654b9ecc6361 HTTP/1.1Host: examplebucket-x--1250000000.cosrapid.ap-guangzhou.myqcloud.comDate: Wed, 29 May 2019 04:10:12 GMTx-cos-copy-source: examplebucket-x--1250000000.cosrapid.ap-guangzhou.myqcloud.com/sourceobject-smallContent-Length: 0Authorization: q-sign-algorithm=sha1&q-ak=AKIDXXXXXXXX&q-sign-time=1559074212;1559077812&q-key-time=1559074212;1559077812&q-header-list=content-length;date;host;x-cos-copy-source&q-url-param-list=partnumber;uploadid&q-signature=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
响应
HTTP/1.1 200 OKContent-Type: application/xmlConnection: keep-aliveDate: Wed, 29 May 2019 04:10:12 GMTx-cos-request-id: NjUwMDAwMDAwMDAwMDAwMDAw<?xml version="1.0" encoding="UTF-8"?><CopyPartResult><ETag>"ee8de918d05640145b18f70f4c3aa602"</ETag><LastModified>2019-05-29T04:10:12Z</LastModified></CopyPartResult>