该 API 接口用于结束一个分段上传,从而获得一个完整的 Object。当一个分段上传完成后,用户未调用该接口,则该分段上传仍然处于未完成的状态,此时调用 GET 请求获得该 Object 会返回错误。

使用须知

  • 该操作要求请求者对指定的 Bucket 拥有可读权限。

  • 若指定的 Bucket 被设置为匿名用户可写,则请求中可不携带用户认证信息;

  • 若指定的 Bucket 被设置为匿名用户可写,但请求中仍然携带了用户认证信息,则 QingStor 对象存储仍然会对该用户进行认证,当 QingStor 对象存储认证该用户不拥有该 Bucket 的可写权限,该请求返回错误。

请求语法

POST /<object-name>?upload_id=<upload-id> HTTP/1.1
Host: <bucket-name>.pek3a.qsstor.com
Date: <date>
Authorization: <authorization-string>

请求参数

调用该接口时,用户可在 URL 中添加以下参数用以设置响应头中的响应字段。

参数名 类型 说明 是否必须

upload_id

String

初始化分段上传时,响应消息体里返回的 upload_id

请求消息头

标准 HTTP 头

读取分段上传合并后的 Object 全部内容所需时间较长,为了避免阻塞,QingStor 对象存储服务不会自动为合并后的文件计算 ETag 值,需要用户自行在调用此接口时设置。此处设置的 ETag 值会在用户调用 HEAD Object 接口时,通过响应头返回。

字段名 类型 说明 是否必须

ETag

String

该值请使用 HTTP 规范所规定的格式。

此接口还需要包含 Host、Date 等公共请求头。详细内容可参见公共请求头

加密对象

若用户操作的 Object 为加密对象,则需提供相应的加密请求头。具体可参考加密对象相关内容,添加相应请求头。

请求消息体

调用该 API 需携带如请求示例中的 Json 消息体。该消息体各字段说明如下:

名称 类型 说明

object_parts

List

消息体顶层,需要按照 part_number 递增排序

part_number

Integer

分段序号,大于等于 0,小于等于 10000

etag

String

该分段内容的校验码,可选

备注:

  • part_number 不一定需要连续,但需要递增。

  • 允许用户在最终合并分段时,排除掉某些已上传分段。

响应头

若对象被加密,服务端将返回 加密响应头

其他公共响应头可参考:公共响应头

错误码

成功则返回 201,其他错误码可参考错误码列表

示例

请求示例

POST /large-object?upload_id=4d26b37a469230619604ecdc0e314782 HTTP/1.1
Host: mybucket.<zone-id>.qsstor.com
Date: Sun, 16 Aug 2015 13:25:10 GMT
Authorization: authorization string
ETag: "0c2f573d81194064b129e940edcefe9b"

{
    "object_parts": [
        {"part_number": 0, "etag": "c837682353601f7fc0a2ccb6bc8f4654"},
        {"part_number": 2, "etag": "28e2c0c6574a1ef20ac41d16a012a7c1"}
    ]
}

响应示例

HTTP/1.1 201 CREATED
Server: QingStor
Date: Sun, 16 Aug 2015 13:25:10 GMT
Content-Length: 0
Connection: close
x-qs-request-id: 37fed66c441a11e5b95f52542e6ce14b

SDK

此接口所对应的各语言 SDK 可参考 SDK 文档