Upload Part

2022-09-24 21:07:23

Upload Part 上传分片

初始化一个 Multipart Upload 之后,可以根据指定的 Object 名和 Upload ID 来分片(Part)上传数据。每一个上传的 Part 都有一个标识它的号码(part number,范围是1~10,000)。 对于同一个 Upload ID,该号码不但唯一标识这一块数据,也标识了这块数据在整个文件内的相对位置。如果你用同一个 Part 号码,上传了新的数据,那么 棱束链对象储存 上已有的这个号码的 Part 数据将被覆盖。 除了最后一块 Part 以外,其他的 Part 最小为5MB,单个Part 最大为95MB;最后一块 Part 没有大小限制。

请求语法

PUT /bucket-name/multi-part-obj?partNumber=PartNumber&uploadId=UploadId HTTP/1.1
Host: s3-us-east-1.ossfiles.com
Content-Length:ContentLength
x-amz-content-sha256:ContentSha256
Date: GMT Date
Authorization: SignatureValue

响应头部

名称 描述
ETag ETag (entity tag) 在每个 Part 生成的时候被创建,ETag 值是该 Part 内容的 uuid,可以用于检查该 Part 内容是否发生变化。 类型:字符串

细节分析

  1. 调用该接口上传 Part 数据前,必须调用 Initiate Multipart Upload 接口,获取一个 棱束链对象储存 服务器颁发的 Upload ID。
  2. 该 upload 必须是上传状态,不能为完成或者终止状态,否则返回 404 NoSuchUpload。
  3. Multipart Upload 要求除最后一个 Part 以外,其他的 Part 大小都要大于5MB,单个Part 最大为95MB。但是 Upload Part 接口并不会立即校验上传 Part 的大小(因为不知道是否为最后一块);只有当 Complete Multipart Upload 的时候才会校验。
  4. 棱束链对象储存 会将服务器端收到 Part 数据的效验值放在 ETag 头内返回给用户,用户需记录 PartNum 与其 Etag 用于后续 Complete Multipart Upload 操作。
  5. Part 号码的范围是1~10000。如果超出这个范围,棱束链对象储存 将返回 400 的错误。
  6. 为了保证数据在网络传输过程中不出现错误,用户发送请求时携带 x-amz-content-sha256,棱束链对象储存 会计算上传数据的 Sha256 与用户上传的 Sha256 值比较,如果不一致返回错误。

示例

请求示例:

PUT /test212/1.vmdk?partNumber=2&uploadId=323db2d29e0be022e1e21d1b7c91594c HTTP/1.1
Authorization: AWS4-HMAC-SHA256 Credential=6a19c6de088ff32ff663287eec8f3b85/20220420/us-east-1/s3/aws4_request,SignedHeaders=host;user-agent;x-amz-content-sha256;x-amz-date, Signature=50976ee45a47f1bb22df3531c382c2ef1b9dafdb707bfa805002314fb2f67b70
x-amz-content-sha256: c0f225b909ff79caa5e84d6958566d08dd9d7fda6ef2f7c44a0bc76104ae50dd
x-amz-date: 20220420T094947Z
Host: s3-us-east-1.ossfiles.com
Content-Length: 5242880

返回示例:

HTTP/1.1 200 OK
Date: Wed, 20 Apr 2022 09:49:52 GMT
Content-Length: 0
Connection: keep-alive
ETag: "d640e8ca7f736e1f4037283c1296076c"
Expires: Sat, 03 Mar 1990 23:33:33 GMT