更新时间:2024-04-15 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

请求消息元素

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

响应消息样式

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

响应消息头

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

响应消息元素

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

错误响应消息说明

  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