Skip to content

大对象分块接口

初始化上传段任务

功能介绍

使用多段上传特性时,用户必须首先调用创建多段上传任务接口创建任务,系统会给用户返回一个全局唯一的多段上传任务号,作为任务标识。后续用户可以根据这个标识发起相关的请求,如:上传段、合并段、列举段等。创建多段上传任务不影响已有的同名对象;同一个对象可以同时存在多个多段上传任务。

请求语法

http
POST /<bucket-name>/<object-key>?uploads HTTP/1.1
Host: fgws3-ocloud.ihep.ac.cn
Date: <date>
Content-Length: 0
Content-Type: <content-type>
X-Amz-Content-Sha256: <content-sha256>
Authorization: <authorization-header>

请求头定义

参数描述
x-amz-meta-以该前缀开头的header都将被认为是用户自定义的元数据,比如:x-amz-meta-title: TITLE 这个header会把title:TITLE作为用户自定义元数据key-value对。类型:字符串默认:无

响应元素

参数描述
InitiateMultipartUploadResult响应容器参数类型:容器 子节点:Key,Bucket
Key对象的Key 类型:字符串 父节点:InitiateMultipartUploadResult
Bucket对象的桶类型:字符串 父节点:InitiateMultipartUploadResult
UploadId分块上传的ID,用这个ID来作为各块属于这个文件的标识类型:字符串 父节点:InitiateMultipartUploadResult

请求消息示例

http
POST https://fgws3-ocloud.ihep.ac.cn/20001-cbq/S3test3.txt?uploads= HTTP/1.1
Host: fgws3-ocloud.ihep.ac.cn
Authorization: AWS4-HMAC-SHA256 Credential=PIM9Z4LAahZtba1BeLW2/20231128/us-east-1/s3/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=99d76bb2424b27b400ce90adaa58fc6ce8fd2fdf317e1c9c4c444db75baaa508
Content-Type: application/ocet-stream
X-Amz-Date: 20231128T083718Z
X-Amz-Content-Sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

响应消息示例

http
HTTP/1.1 200 OK
Server: JWanFS FGW Server
X-Amz-Request-Id: 1701160639352568301
Date: Tue, 28 Nov 2023 08:37:19 GMT
Accept-Ranges: bytes
Content-Length: 259
Content-Type: application/xml

<?xml version="1.0" encoding="UTF-8"?>
<InitiateMultipartUploadResult
    xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <Bucket>20001-cbq</Bucket>
    <Key>S3test3.txt</Key>
    <UploadId>e1a680618264019c2e98fb37f02e42bdafc892a7</UploadId>
</InitiateMultipartUploadResult>

上传段

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

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

请求语法

http
PUT /<bucket-name>/<object-key>?partNumber=<part-number>&uploadId=<upload-id> HTTP/1.1
Host: fgws3-ocloud.ihep.ac.cn
Date: <date>
Content-Length: <part-size>
Content-Type: <content-type>
X-Amz-Content-Sha256: <content-sha256>
Authorization: <authorization-header>

<part-data>

请求头定义

参数描述是否必须
Content-LengthEntity Body的长度 类型:整型 默认:无
Content-MD5Entity Body的MD5摘要 类型:字符串 默认:无

特殊错误码

错误码Http状态码描述
NoSuchUpload404 Not Found对应的分块上传不存在,可能原因:uploadId非法、已经执行了abort、已经执行了complete等

请求消息示例

http
PUT https://fgws3-ocloud.ihep.ac.cn/20001-cbq/S3test1.txt?partNumber=1&uploadId=1d1375c6431e0f9ac30a1d37003a8eb8564c6d88 HTTP/1.1
Host: fgws3-ocloud.ihep.ac.cn
Content-Length: 12
Content-Md5: Zl8nvtblllvc/0VEbXhRXA==
X-Amz-Content-Sha256: a8647ad4015e68ea743af1cd830305d6455d09fa3a27b546f3e215671298ab1c
X-Amz-Date: 20231128T083840Z
Authorization: AWS4-HMAC-SHA256 Credential=PIM9Z4LAahZtba1BeLW2/20231128/us-east-1/s3/aws4_request, SignedHeaders=content-length;content-md5;host;x-amz-content-sha256;x-amz-date, Signature=57d4eaa98b10bf21513df2cfa08cfa71f00664c5938f54cff1a4fbb0ae3fb9d1

响应消息示例

http
HTTP/1.1 200 OK
Date: Tue, 28 Nov 2023 08:38:41 GMT
Accept-Ranges: bytes
Content-Length: 0
Etag: "665f27bed6e5965bdcff45446d78515c"
Server: JWanFS FGW Server
X-Amz-Request-Id: 1701160721749557386

合并段

功能介绍

如果用户上传完所有的段,就可以调用合并段接口,系统将在服务端将用户指定的段合并成一个完整的对象。在执行“合并段”操作以前,用户不能下载已经上传的数据。在合并段时需要将多段上传任务初始化时记录的附加消息头信息拷贝到对象元数据中,其处理过程和普通上传对象带这些消息头的处理过程相同。在并发合并段的情况下,仍然遵循Last Write Win策略,但“Last Write”的时间定义为段任务的初始化时间。

已经上传的段,只要没有取消对应的多段上传任务,都要占用用户的容量配额;对应的多段上传任务“合并段”操作完成后,只有指定的多段数据占用容量配额,用户上传的其他此多段任务对应的段数据如果没有包含在“合并段”操作制定的段列表中,“合并段”完成后删除多余的段数据,且同时释放容量配额。

合并完成的多段上传数据可以通过已有的下载对象接口,下载整个多段上传对象或者指定Range下载整个多段上传对象的某部分数据。

合并完成的多段上传数据可以通过已有的删除对象接口,删除整个多段上传对象的所有分段数据,删除后不可恢复。

请求语法

http
POST /<bucket-name>/<object-key>?uploadId=<upload-id> HTTP/1.1
Host: fgws3-ocloud.ihep.ac.cn
Date: <date>
Content-Type: application/xml
Content-Length: <request-body-size>
X-Amz-Content-Sha256: <content-sha256>
Authorization: <authorization-header>

<CompleteMultipartUpload>
  <Part>
    <PartNumber>1</PartNumber>
    <ETag>"<part1-etag>"</ETag>
  </Part>
  <Part>
    <PartNumber>2</PartNumber>
    <ETag>"<part2-etag>"</ETag>
  </Part>
</CompleteMultipartUpload>

请求头定义

参数描述
x-amz-meta-以该前缀开头的header都将被认为是用户自定义的元数据,比如:x-amz-meta-title: TITLE 这个header会把title:TITLE作为用户自定义元数据key-value对。类型:字符串默认:无

请求元素

参数描述是否必须
CompleteMultipartUploadEntity Body的长度 类型:整型 默认:无
ETag一块数据上传完毕后,服务器端返回的Entity tag类型:字符串 父节点:Part
Part每一块的描述信息的容器 类型:容器子节点:PartNumber,ETag
PartNumber分块序号。 类型:整型 父节点:Part

响应元素

参数描述
CompleteMultipartUploadResult响应容器参数 类型:容器 子节点:Location,Bucket,Key,ETag
Key对象的Key 类型:字符串 父节点:CompleteMultipartUploadResult
Bucket对象的桶类型:字符串 父节点:CompleteMultipartUploadResult
ETag新创建的对象的Entity Tag 类型:字符串 父节点:CompleteMultipartUploadResult
Location新创建的这个对象的资源定位URL 类型:字符串 父节点:CompleteMultipartUploadResult

特殊错误码

错误码Http状态码描述
InvalidPart400 Bad Request请求所指定的上传块中,有一个或多个块不存在,可能的原因:该块缺失未上传,该块的EntityTag不匹配等
InvalidPartOrder400 Bad Request上传块列表,不是按照块序号升序排列
NoSuchUpload404 Not Found对应的分块上传不存在,可能原因:uploadId非法、已经执行了abort、已经执行了complete等

请求消息示例

http
POST https://fgws3-ocloud.ihep.ac.cn/20012-test-RAMmI-499/S3test.txt%20?uploadId=5d490580065444e3cacfed03998f09746a3ffdc1 HTTP/1.1
Host: fgws3-ocloud.ihep.ac.cn
Content-Length: 475
X-Amz-Date: 20231128T084524Z
X-Amz-Content-Sha256: d4197617366ccb6681566c32549a2947d69315c3c5c377748892e25a3e7fcc4b
Authorization: AWS4-HMAC-SHA256 Credential=LIAubFpMwwb34FXfvvvw/20231128/us-east-1/s3/aws4_request, SignedHeaders=content-length;host;x-amz-content-sha256;x-amz-date, Signature=d2219289e5ea87eafc3b1a2d7afeeef4d1cb3c20011a82aca849982e0e4b1db6

响应消息示例

http
HTTP/1.1 200 OK 
Date: Tue, 28 Nov 2023 08:45:24 GMT
Accept-Ranges: bytes
Content-Length: 351
Content-Type: application/xml
Server: JWanFS FGW Server
X-Amz-Request-Id: 1701161124981482313

<?xml version="1.0" encoding="UTF-8"?>
<CompleteMultipartUploadResult
    xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <Bucket>20012-test-RAMmI-499</Bucket>
    <ETag>&#34;f45dfee146f3414491423aad4d6c7cfd-8&#34;</ETag>
    <Key>S3test.txt </Key>
    <Location>http://127.0.0.1:8899/buckets/20012-test-RAMmI-499/S3test.txt%20</Location>
</CompleteMultipartUploadResult>

取消多段上传任务

功能介绍

如果用户希望取消一个任务,可以调用取消多段上传任务接口取消任务。合并段或取消任务接口被调用后,用户不能再对任务进行上传段和列举段的操作。

特殊错误码

错误码Http状态码描述
NoSuchUpload404 Not Found对应的分块上传不存在,可能原因:uploadId非法、已经执行了abort、已经执行了complete等

请求语法

http
DELETE /<bucket-name>/<object-key>?uploadId=<upload-id> HTTP/1.1
Host: fgws3-ocloud.ihep.ac.cn
Date: <date>
Authorization: <authorization-header>
X-Amz-Content-Sha256: <content-sha256>

请求消息示例

http
DELETE https://fgws3-ocloud.ihep.ac.cn/20011-test-ENxdR-052 HTTP/1.1
Host: fgws3-ocloud.ihep.ac.cn
X-Amz-Date: 20231128T084155Z
X-Amz-Content-Sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
Authorization: AWS4-HMAC-SHA256 Credential=6H710y1DFuIFzMIvUp8O/20231128/us-east-1/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=48410d7af44e34875874fef8739ff984c0b4a5e08135eabdf980e1b73f72c72a

响应消息示例

http
HTTP/1.1 204 No Content 
Server: JWanFS FGW Server
X-Amz-Request-Id: 1701160915501770044
Date: Tue, 28 Nov 2023 08:41:55 GMT
Accept-Ranges: bytes

列举已上传的段

功能介绍

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

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

请求语法

http
GET /<bucket-name>/<object-key>?uploadId=<upload-id> HTTP/1.1
Host: fgws3-ocloud.ihep.ac.cn
X-Amz-Content-Sha256: <content-sha256>
Date: <date>
Authorization: <authorization-header>

请求参数

参数描述是否必须
max-parts响应中的limit个数 类型:整型 默认值:1000 取值:[0-1000]
part-number-marker分块号的界限,只有更大的分块号会被列出来。 类型:字符串 默认:无
UploadId分块上传操作的ID 类型:字符串 默认:无

响应元素

参数描述
ListPartsResult响应容器参数 类型:容器 子节点:Bucket,IsTruncated,Key,MaxParts、PartNumberMarker、Part、ETag、LastModified、PartNumber、Size、StorageClass、UploadId
Key对象的 Key 类型:字符串 父节点:ListPartsResult
Bucket对象的桶 类型:字符串 父节点:ListPartsResult
ETag新创建的对象的 Entity Tag 类型:字符串 父节点:ListPartsResult
UploadId分块上传操作的 ID 类型:字符串 父节点:ListPartsResult
StorageClass存储级别 类型:字符串 父节点:ListPartsResult
PartNumberMarker上次列举操作后的 Part number 类型:整数 父节点:ListPartsResult
MaxParts响应允许返回的最大 part 数目 类型:整数 父节点:ListPartsResult
IsTruncated是否截断,如果因为设置了 limit 导致未返回所有数据集,则该值设置为 true 类型:整数 父节点:ListPartsResult
Part识别特定 part 的一串数字 类型:整数 父节点:Part
LastModified该 part 上传的时间 类型:日期 父节点:Part
ETag当该 part 被上传时返回 类型:字符串 父节点:Part
Size已上传的 part 数据的大小 类型:整数 父节点:Part

特殊错误码

错误码Http状态码描述
NoSuchUpload404 Not Found对应的分块上传不存在,可能原因:uploadId非法、已经执行了abort、已经执行了complete等

请求消息示例

http
GET https://fgws3-ocloud.ihep.ac.cn/20011-test-ENxdR-052/S3test.txt%20?uploadId=5d490580065444e3cacfed03998f09746a3ffdc1 HTTP/1.1
Host: fgws3-ocloud.ihep.ac.cn
X-Amz-Content-Sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
Authorization: AWS4-HMAC-SHA256 Credential=6H710y1DFuIFzMIvUp8O/20231128/us-east-1/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=b26e139269bce59209958251adad86b1ec6ab5377af9ae8d774c0ded93138131
X-Amz-Date: 20231128T084155Z

响应消息示例

http
HTTP/1.1 200 OK 
Content-Type: application/xml
Server: JWanFS FGW Server
X-Amz-Request-Id: 1701160915449026242
Date: Tue, 28 Nov 2023 08:41:55 GMT
Accept-Ranges: bytes
Content-Length: 1027

<ListPartsResult
    xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <Bucket>20011-test-ENxdR-052</Bucket>
    <IsTruncated>false</IsTruncated>
    <Key>S3test.txt </Key>
    <MaxParts>10000</MaxParts>
    <PartNumberMarker>0</PartNumberMarker>
    <Part>
        <ETag>&#34;984ca73195a93da18f0f74a3880ef01f&#34;</ETag>
        <LastModified>2023-11-28T08:41:54Z</LastModified>
        <PartNumber>1</PartNumber>
        <Size>5242880</Size>
    </Part>
    <Part>
        <ETag>&#34;fa08c07429b04078294cbd56c1eb8e6f&#34;</ETag>
        <LastModified>2023-11-28T08:41:55Z</LastModified>
        <PartNumber>2</PartNumber>
        <Size>5242880</Size>
    </Part>
    <Part>
        <ETag>&#34;ce690c786278b2a84484453995411b44&#34;</ETag>
        <LastModified>2023-11-28T08:41:55Z</LastModified>
        <PartNumber>3</PartNumber>
        <Size>5242880</Size>
    </Part>
    <Part>
        <ETag>&#34;7d6b4bb9d65d9cd72eb1d164f07fe034&#34;</ETag>
        <LastModified>2023-11-28T08:41:55Z</LastModified>
        <PartNumber>4</PartNumber>
        <Size>5242880</Size>
    </Part>
    <StorageClass>STANDARD</StorageClass>
    <UploadId>5d490580065444e3cacfed03998f09746a3ffdc1</UploadId>
</ListPartsResult>

列举桶中已初始化多段任务

功能介绍

用户可以通过本接口查询一个桶中所有的初始化后还未合并以及未取消的多段上传任务。

请求语法

http
GET /<bucket-name>?uploads HTTP/1.1
Host: fgws3-ocloud.ihep.ac.cn
X-Amz-Content-Sha256: <content-sha256>
Date: <date>
Authorization: <authorization-header>

请求参数

参数描述是否必须
key-marker指定某一uploads key,只有大于该key-marker的才会被列出 类型: String
max-uploads最多返回max-uploads条记录 类型: 数字 默认:1000 取值:[0-1000]

响应元素

参数描述
ListMultipartUploadsResult响应容器参数 类型:容器 子节点:Bucket,IsTruncated,Delimiter,EncodingType、KeyMarker、Prefix、Upload、Key、UploadId
Bucket对象的桶 类型:字符串 父节点:ListMultipartUploadsResult
Delimiter分隔符 类型:字符串 父节点:ListMultipartUploadsResult
EncodingType编码类型 类型:字符串 父节点:ListMultipartUploadsResult
KeyMarker上次列举操作后的 Part number 类型:整数 父节点:ListMultipartUploadsResult
Prefix响应允许返回的最大 part 数目 类型:整数 父节点:ListMultipartUploadsResult
IsTruncated是否截断,如果因为设置了 limit 导致未返回所有数据集,则该值设置为 true 类型:整数 父节点:ListMultipartUploadsResult
Upload类型:容器 子节点:Key,UploadId 父节点:ListMultipartUploadsResult
Key对象的 Key 类型:字符串 父节点:Upload
UploadId分块上传操作的 ID 类型:字符串 父节点:Upload

请求消息示例

http
GET https://fgws3-ocloud.ihep.ac.cn/20001-cbq?uploads= HTTP/1.1
Host: fgws3-ocloud.ihep.ac.cn
X-Amz-Date: 20231128T083911Z
X-Amz-Content-Sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
Authorization: AWS4-HMAC-SHA256 Credential=PIM9Z4LAahZtba1BeLW2/20231128/us-east-1/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=a58ecc07fa5c35f06f8065cd322db8d80c4a21bd546191c1ea0de5d8490fd965

响应消息示例

http
HTTP/1.1 200 OK
Server: JWanFS FGW Server
X-Amz-Request-Id: 1701160752470847804
Date: Tue, 28 Nov 2023 08:39:12 GMT
Accept-Ranges: bytes
Content-Length: 624
Content-Type: application/xml

<?xml version="1.0" encoding="UTF-8"?>
<ListMultipartUploadsResult
    xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <Bucket>20001-cbq</Bucket>
    <Delimiter></Delimiter>
    <EncodingType></EncodingType>
    <IsTruncated>false</IsTruncated>
    <KeyMarker></KeyMarker>
    <MaxUploads>10000</MaxUploads>
    <Prefix></Prefix>
    <Upload>
        <Key>S3test1.txt</Key>
        <UploadId>1d1375c6431e0f9ac30a1d37003a8eb8564c6d88</UploadId>
    </Upload>
    <Upload>
        <Key>S3test2.txt</Key>
        <UploadId>25ddfdf5db9604eb2cddb0c99d1fcaea6cafa8f4</UploadId>
    </Upload>
    <Upload>
        <Key>S3test3.txt</Key>
        <UploadId>e1a680618264019c2e98fb37f02e42bdafc892a7</UploadId>
    </Upload>
</ListMultipartUploadsResult>