更新时间:2024-03-05 GMT+08:00

上传段

功能介绍

多段上传任务创建后,用户可以通过指定多段上传任务号,通过上传段接口为特定的任务上传段,从客户端上传新数据。同一个对象的同一个多段上传任务在上传段时,上传的顺序对后续的合并操作没有影响,也即支持多个段并发上传。

段大小范围是[100KB,5GB],但在进行合并段操作时,最后一个段的大小范围为[0,5GB]。上传的段的编号也有范围限制,其范围是[1,10000]。

该操作支持服务端加密功能。

段任务中的partNumber是唯一的,重复上传相同partNumber的段,后一次上传会覆盖前一次上传内容。多并发上传同一对象的同一partNumber时,服务端遵循Last Write Win策略,但“Last Write”的时间定义为段元数据创建时间。为了保证数据准确性,客户端需要加锁保证同一对象的同一个段上传的并发性。同一对象的不同段并发上传不需要加锁。

请求消息样式

PUT /ObjectName?partNumber=partNum&uploadId=uploadID  HTTP/1.1  
Host: bucketname.obs.region.example.com
Date: date
Content-Length: length 
Authorization: authorization
Content-MD5:md5
<object Content>

请求消息参数

在上传段的时候需要通过在消息参数中指定多段上传任务号和段号来上传指定段,参数的具体意义如表1所示。

表1 请求消息参数

参数名称

描述

是否必选

partNumber

上传段的段号。取值为从1到10000的整数。

类型:Integer

uploadId

多段上传任务Id。

类型:String

请求消息头

该请求使用公共消息头,具体请参考表3

表2 服务端加密请求消息头

消息头名称

描述

是否必选

x-obs-server-side-encryption-customer-algorithm

SSE-C方式下使用该头域,该头域表示加密使用的算法。

类型:String

示例:x-obs-server-side-encryption-customer-algorithm:AES256

约束:需要和x-obs-server-side-encryption-customer-key, x-obs-server-side-encryption-customer-key-MD5一起使用。

否。当使用SSE-C方式时,必选,需要与初始化上传段任务使用相同的算法。

x-obs-server-side-encryption-customer-key

SSE-C方式下使用该头域,该头域表示加密使用的密钥。该密钥用于加密对象。

类型:String

示例:x-obs-server-side-encryption-customer-key:K7QkYpBkM5+hca27fsNkUnNVaobncnLht/rCB2o/9Cw=

约束:该头域由256-bit的密钥经过base64-encoded得到,需要和x-obs-server-side-encryption-customer-algorithm,x-obs-server-side-encryption-customer-key-MD5一起使用。

否。当使用SSE-C方式时,必选,需要与初始化上传段任务使用相同的密钥。

x-obs-server-side-encryption-customer-key-MD5

SSE-C方式下使用该头域,该头域表示加密使用的密钥的MD5值。MD5值用于验证密钥传输过程中没有出错。

类型:String

示例:x-obs-server-side-encryption-customer-key-MD5:4XvB3tbNTN+tIEVa0/fGaQ==

约束:该头域由密钥的128-bit MD5值经过base64-encoded得到,需要和x-obs-server-side-encryption-customer-algorithm,x-obs-server-side-encryption-customer-key一起使用。

否。当使用SSE-C方式时,必选,需要与初始化上传段任务使用相同的MD5值。

请求消息元素

该请求消息中不使用消息元素。

响应消息样式

1
2
3
4
HTTP/1.1 status_code
Date: date
ETag: etag
Content-Length: length

响应消息头

该请求的响应消息使用公共消息头,具体请参考表1

表3 附加响应消息头

消息头名称

描述

x-obs-server-side-encryption

如果服务端加密是SSE-KMS方式,响应包含该头域。

类型:String

示例:x-obs-server-side-encryption:kms

x-obs-server-side-encryption-kms-key-id

如果服务端加密是SSE-KMS方式,响应包含该头域,该头域表示主密钥。

类型:String

格式为: regionID:domainID(租户ID):key/key_id

其中regionID是使用密钥所属region的ID;domainID是使用密钥所属租户的租户ID;key_id是本次加密使用的密钥ID。

示例: x-obs-server-side-encryption-kms-key-id:region:domainiddomainiddomainiddoma0001:key/4f1cd4de-ab64-4807-920a-47fc42e7f0d0

x-obs-server-side-encryption-customer-algorithm

如果服务端加密是SSE-C方式,响应包含该头域,该头域表示加密使用的算法。

类型:String

示例:x-obs-server-side-encryption-customer-algorithm:AES256

x-obs-server-side-encryption-customer-key-MD5

如果服务端加密是SSE-C方式,响应包含该头域,该头域表示加密使用的密钥的MD5值。

类型:String

示例:x-obs-server-side-encryption-customer-key-MD5:4XvB3tbNTN+tIEVa0/fGaQ==

响应消息元素

该请求的响应消息中不带消息元素。

错误响应消息说明

  1. 如果段序号超过范围[1,10000],则返回错误400 Bad Request。
  2. 如果段大小超过5G,则返回错误400 Bad Request。
  3. 如果AccessKey或签名无效,OBS返回403 Forbidden, 错误码为AccessDenied。
  4. 查询桶是否存在,如果桶不存在,OBS返回404 Not Found,错误码为NoSuchBucket。
  5. 检查桶的ACL,判断用户DomainId是否具有指定桶的写权限,如果没有权限,则OBS返回403 Forbidden,错误码为AccessDenied。
  6. 检查多段上传任务是否存在,如果不存在,OBS返回404 Not Found,错误码为NoSuchUpload。
  7. 检查请求用户是否是多段上传任务的发起者(Initiator),如果不是,OBS返回403 Forbidden, 错误码为AccessDenied。

其他错误已包含在表2中。

请求示例

PUT /object02?partNumber=1&uploadId=00000163D40171ED8DF4050919BD02B8 HTTP/1.1
User-Agent: curl/7.29.0
Host: examplebucket.obs.region.example.com
Accept: */*
Date: WED, 01 Jul 2015 05:15:55 GMT
Authorization: OBS H4IPJX0TQTHTHEBQQCEC:ZB0hFwaHubi1aKHv7dSZjJts40g=
Content-Length: 102015348

[102015348 Byte part content]

响应示例

1
2
3
4
5
6
7
HTTP/1.1 200 OK
Server: OBS
x-obs-request-id: 8DF400000163D40956A703289CA066F1
ETag: "b026324c6904b2a9cb4b88d6d61c81d1"
x-obs-id-2: 32AAAQAAEAABAAAQAAEAABAAAQAAEAABCUQu/EOEVSMa04GXVwy0z9WI+BsDKvfh
Date: WED, 01 Jul 2015 05:15:55 GMT
Content-Length: 0