UploadPart 接口请求实现将对象按照分块的方式上传到指定存储桶。需先调用 InitiateMultipartUpload 接口获取
UploadId,再使用相同的对象键、UploadId 以及递增的 PartNumber 调用本接口上传各分块;分块上传完成后,调用 CompleteMultipartUpload 完成对象合并。注意事项
分块编号
partNumber 必须为1到10000之间的整数(包含1和10000)。超出范围将返回 InvalidArgument。各分块允许乱序上传,最终对象内容按分块编号升序拼接。单分块大小限制
单个分块的大小不能超过 5 GiB,超出时返回
EntityTooLarge。除最后一个分块外,其余分块在调用 CompleteMultipartUpload 时还需满足最小分块大小限制,详见 CompleteMultipartUpload。分块覆盖
若使用相同的
UploadId 和 PartNumber 重复上传,后到达的请求将覆盖之前已上传的同编号分块。UploadId 有效性
请求
请求语法
PUT /<ObjectKey>?partNumber=<PartNumber>&uploadId=<UploadId> HTTP/1.1Host: <BucketName-APPID>.cosrapid.<Region>.myqcloud.comDate: <GMT Date>Content-Length: <Content Length>Content-MD5: <MD5>Authorization: <Auth String>[Object Part]
说明:
请求参数
参数名称 | 描述 | 类型 | 是否必选 |
partNumber | 标识本次分块上传的编号,取值范围为 1 到 10000(包含两端) | integer | 是 |
uploadId | string | 是 |
请求头部
Header 名称 | 描述 | 类型 | 是否必选 |
Content-Length | RFC 2616 中定义的 HTTP 请求内容长度(字节)。未指定 Transfer-Encoding: chunked 时必须携带 | string | 否 |
Content-MD5 | RFC 2616 中定义的请求内容 MD5 摘要的 Base64 编码值。携带时服务端会校验,不一致返回 BadDigest | string | 否 |
Transfer-Encoding | RFC 2616 中定义的传输编码格式。如果希望以分块方式传输请求体,则指定 Transfer-Encoding: chunked,并不再指定 Content-Length | string | 否 |
请求体
该请求的请求体(Body)为本次上传分块的原始字节流。
响应
响应头部
Header 名称 | 描述 | 类型 | 是否必返 |
ETag | string | 是 | |
Last-Modified | 本分块最近一次被上传的时间,格式为 RFC 1123 GMT,例如 Wed, 29 May 2019 04:10:12 GMT | string | 是 |
x-cos-hash-crc64ecma | 本分块的 CRC64-ECMA 校验值,十进制字符串 | string | 否 |
响应体
该接口的响应体为空。
错误码
实际案例
案例一:上传一个分块
请求
PUT /exampleobject?partNumber=1&uploadId=1585130821cbb7df1d11846c073ad648e8f33b087cec2381df437acdc833cf654b9ecc6361 HTTP/1.1Host: examplebucket-x--1250000000.cosrapid.ap-guangzhou.myqcloud.comDate: Wed, 25 Mar 2020 10:07:14 GMTContent-Type: application/octet-streamContent-Length: 1048576Content-MD5: OScKloo1fSQgfpkRFiUH6w==Authorization: q-sign-algorithm=sha1&q-ak=AKIDXXXXXXXX&q-sign-time=1585130834;1585138034&q-key-time=1585130834;1585138034&q-header-list=content-length;content-md5;content-type;date;host&q-url-param-list=partnumber;uploadid&q-signature=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx[Object Part]
响应
HTTP/1.1 200 OKContent-Length: 0Connection: keep-aliveDate: Wed, 25 Mar 2020 10:07:14 GMTETag: "39270a968a357d24207e9911162507eb"Last-Modified: Wed, 25 Mar 2020 10:07:14 GMTx-cos-hash-crc64ecma: 9973912126177188060x-cos-request-id: NjUwMDAwMDAwMDAwMDAwMDAw
案例二:使用 chunked 传输编码上传分块
本案例请求中使用
Transfer-Encoding: chunked 编码,案例描述的是 HTTP 请求中的原始数据,在使用过程中根据不同语言和库将有不同的调用方法,请开发者查阅语言和库的相关文档。请求
PUT /exampleobject?partNumber=2&uploadId=1585130821cbb7df1d11846c073ad648e8f33b087cec2381df437acdc833cf654b9ecc6361 HTTP/1.1Host: examplebucket-x--1250000000.cosrapid.ap-guangzhou.myqcloud.comDate: Wed, 25 Mar 2020 10:08:01 GMTContent-Type: application/octet-streamTransfer-Encoding: chunkedAuthorization: q-sign-algorithm=sha1&q-ak=AKIDXXXXXXXX&q-sign-time=1585130881;1585138081&q-key-time=1585130881;1585138081&q-header-list=content-type;date;host;transfer-encoding&q-url-param-list=partnumber;uploadid&q-signature=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx100000[Chunked Part Content]0
响应
HTTP/1.1 200 OKContent-Length: 0Connection: keep-aliveDate: Wed, 25 Mar 2020 10:08:01 GMTETag: "aa488bb80185a6be87f4a7b936a80752"Last-Modified: Wed, 25 Mar 2020 10:08:01 GMTx-cos-hash-crc64ecma: 7188322482464764960x-cos-request-id: NjUwMDAwMDAwMDAwMDAwMDAw