Initiate Multipart Upload

2022-09-24 18:54:24

Initiate Multipart Upload 创建一个分片上传

初始化MultipartUpload,使用 Multipart Upload 传输数据前,必须先调用该接口来通知 棱束链对象存储 初始化一个 Multipart Upload 事件。该接口会返回一个 棱束链对象存储 服务器创建的全局唯一的 UploadID,用于标识本次 Multipart Upload 事件。 用户可以根据这个 ID 来发起相关的操作,如中止 Multipart Upload、查询 Multipart Upload 等。

请求语法

POST /bucket-name/multi-part-obj?uploads HTTP/1.1
Host: s3-us-east-1.ossfiles.com
Date: GMT Date
Authorization: SignatureValue

请求头部

名称 描述
Cache-Control 指定该 Object 被下载时的网页的缓存行为;更详细描述请参照 RFC 2616。 类型:字符串
Content-Disposition 指定该 Object 被下载时的名称;更详细描述请参照 RFC 2616。 类型:字符串
Content-Encoding 指定该 Object 被下载时的内容编码格式;更详细描述请参照 RFC 2616。 类型:字符串
x-amz-meta-sha256 对消息内容(不包括头部)计算 Sha256 值获得 64位字符,该值为消息的 Sha256 值。该请求头可用于消息合法性的检查(消息内容是否与发送时一致)。 类型:字符串
Expires 过期时间(milliseconds);更详细描述请参照 RFC 2616。 类型:字符串
x-amz-meta- 用户自定义变量,其中一个用处是:用户客户端加密时,设置秘钥对相关信息。 类型:字符串

响应元素(Response Elements)

名称 描述
InitiateMultipartUploadResult 保存 Initiate Multipart Upload 请求结果的容器。 类型:容器 子节点:Bucket, Key, UploadId 父节点:None
Bucket 初始化一个 Multipart Upload 事件的 Bucket 名称。 类型:字符串 父节点:InitiateMultipartUploadResult
Key 初始化一个 Multipart Upload 事件的 Object 名称。 类型:字符串 父节点:InitiateMultipartUploadResult
UploadId 唯一标示此次 Multipart Upload 事件的 ID。 类型:字符串 父节点:InitiateMultipartUploadResult

细节分析

  1. 该操作计算认证签名的时候,需要加“?uploads”到 CanonicalizedResource 中。
  2. 初始化 Multipart Upload 请求,支持如下标准的 HTTP 请求头:Cache-Control,Content- Disposition,Content-Encoding,Content-Type,Expires,以及以“x-amz-meta-”开头的用户自定义 Headers。具体含义请参见 PUT Object 接口。
  3. 如果试图添加的 Object 的同名文件已经存在,并且有访问权限,新添加的文件将不会覆盖原来的文件,将返回错误 。
  4. 服务器收到初始化 Multipart Upload 请求后,会返回一个 XML 格式的请求体。该请求体内有三个元素:Bucket,Key 和 UploadID。请记录下其中的 UploadID,以用于后续的 Multipart 相关操作。

示例

请求示例:

POST /test212/1.vmdk?uploads= HTTP/1.1
Content-Type: application/x-virtualbox-vmdk
Authorization: AWS4-HMAC-SHA256 Credential=6a19c6de088ff32ff663287eec8f3b85/20220420/us-east-1/s3/aws4_request,SignedHeaders=content-type;host;user-agent;x-amz-content-sha256;x-amz-date;x-amz-meta-s3b-last-modified;x-amz-meta-sha256, Signature=3ad57a29b6d71a0ef3b6c63944e3975c1826613054fb692b55e4eac75c5d996e
x-amz-content-sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
x-amz-date: 20220420T094944Z
x-amz-meta-s3b-last-modified: 20220322T132546Z
x-amz-meta-sha256: 90fa1fed39020eba2adbfc32f6668ca14132d508bb260812a3cabd36fab98aff
Host: s3-us-east-1.ossfiles.com
Content-Length: 0
Connection: Keep-Alive

返回示例:

HTTP/1.1 200 OK
Date: Wed, 20 Apr 2022 09:49:42 GMT
Content-Type: application/xml
Content-Length: 262
Connection: keep-aliv
Expires: Sat, 03 Mar 1990 23:33:33 GMT

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<InitiateMultipartUploadResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <Bucket>test212</Bucket>
    <Key>1.vmdk</Key>
    <UploadId>323db2d29e0be022e1e21d1b7c91594c</UploadId>
</InitiateMultipartUploadResult>