功能描述
Upload Part 接口请求实现将对象按照分块的方式上传到 CSP。最多支持 10000 分块,每个分块大小为 1 MB 到 5 GB ,最后一个分块可以小于 1 MB。
细节分析
- 分块上传首先需要进行初始化,使用 Initiate Multipart Upload 接口实现,初始化后会得到一个 uploadId ,唯一标识本次上传。
- 在每次请求 Upload Part 时,需要携带 partNumber 和 uploadId,partNumber 为块的编号,支持乱序上传。
- 当传入 uploadId 和 partNumber 都相同的时候,后传入的块将覆盖之前传入的块。当 uploadId 不存在时会返回 404 错误,NoSuchUpload。
请求
请求示例
PUT /ObjectName?partNumber=PartNumber&uploadId=UploadId HTTP/1.1
Host: <BucketName-APPID>.<Endpoint>
Date: GMT Date
Content-Length: Size
Authorization: Auth String
说明:
Authorization: Auth String (详细参见请求签名章节)。
请求行
PUT /ObjectName?partNumber=PartNumber&uploadId=UploadId HTTP/1.1
该 API 接口接受 PUT 请求。
请求参数
包含所有请求参数的请求行示例:
PUT /ObjectName?partNumber=PartNumber&uploadId=UploadId HTTP/1.1
具体内容如下:
参数名称 | 描述 | 类型 | 必选 |
partNumber | 标识本次分块上传的编号。 | String | 是 |
uploadId | 标识本次分块上传的 ID。 使用 Initiate Multipart Upload 接口初始化分片上传时会得到一个 uploadId,该 ID 不但唯一标识这一分块数据,也标识了这分块数据在整个文件内的相对位置。 | String | 是 |
请求头
公共头部
该请求操作的实现使用公共请求头,了解公共请求头详细请参见 公共请求头部 章节。
非公共头部
必选头部 该请求操作需要请求头使用必选头部,具体内容如下:
名称 | 描述 | 类型 | 必选 |
Content-Length | RFC 2616 中定义的 HTTP 请求内容长度(字节)。 | String | 是 |
推荐头部 该请求操作推荐请求头使用推荐头部,具体内容如下:
名称 | 描述 | 类型 | 必选 |
Expect | RFC 2616 中定义的 HTTP 请求内容长度(字节)。 | String | 否 |
Content-MD5 | RFC 1864 中定义的经过Base64编码的128-bit 内容 MD5 校验值。此头部用来校验文件内容是否发生变化。 | String | 否 |
请求体
该请求的操作请求体为空。
响应
响应头
公共响应头
该响应使用公共响应头,了解公共响应头详细请参见 公共响应头部 章节。
响应体
该响应的响应体为空。
实际案例
案例一:简单案例
请求
PUT /ObjectName?partNumber=1&uploadId=1484727270323ddb949d528c629235314a9ead80f0ba5d993a3d76b460e6a9cceb9633b08e HTTP/1.1
Host: arlenhuangtestsgnoversion-1251668577.cos.ap-beijing.myqcloud.com
Date: Wed,18 Jan 2017 16:17:03 GMT
Authorization: q-sign-algorithm=sha1&q-ak=AKIDxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&q-sign-time=1484727403;32557623403&q-key-time=1484727403;32557623403&q-header-list=host&q-url-param-list=partNumber;uploadId&q-signature=bfc54518ca8fc31b3ea287f1ed2a0dd8c8e88a1d
Content-Length: 10485760
[Object]
响应
HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: 0
Connection: keep-alive
Date: Wed,18 Jan 2017 16:17:03 GMT
Etag: "e1e5b4965bc7d30880ed6d226f78a5390f1c09fc"
x-cos-request-id: NTg3ZjI0NzlfOWIxZjRlXzZmNGJfMWYy
案例二:使用服务端加密SSE-COS
请求
PUT /exampleobject?partNumber=1&uploadId=2~64VtuaVu-zSWDWRliLAhbhXKy-PMQmc HTTP/1.1
Host: bucket0-1255000078.cos.chongqing.cos.****-v6-iaas.tcecloud.fsphere.cn
User-agent: coscmd-v1.8.6.24
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
x-cos-server-side-encryption: AES256
Content-Length: 1048576
Authorization: q-sign-algorithm=sha1&q-ak=AKID****&q-sign-time=1627907003;1627917063&q-key-time=1627907003;1627917063&q-header-list=host&q-url-param-list=&q-signature=ff0358a03c39a8df5ef6df8fa8d443b327ddf37b
[Object Content]
响应
HTTP/1.1 200 OK
Accept-Ranges: bytes
Content-Length: 0
Date: Mon, 02 Aug 2021 12:24:47 GMT
Etag: "1082d964b2be64ce18e9f0204a447be6"
Server: nginx
X-Cache: MISS from SZ-SQUIDWEB-81
X-Cache-Lookup: MISS from SZ-SQUIDWEB-81:8080
X-Cos-Request-Id: tx000000000000000908ba3-006107e41f-d2e862-default
X-Cos-Server-Side-Encryption: AES256
X-Response-Csp-Component: proxy-raw