逐个上传分片

最近更新时间:2017-11-16 20:10:50

功能描述

使用 API 对大于 20 MB 的文件进行逐片上传之前,需要先使用「初始化分片上传」API,从腾讯云获取分片上传所需的参数(session 和 slice_size)。使用该接口前请确认对应上传目录已存在,且已获得分片上传所需参数(session 和 slice_size)。

使用分片上传方式上传文件流程:

第一步:发送「初始化分片上传」请求。
第二步:腾讯云会判断文件的上传状态,若未完成上传,会返回 -4019 错误,用户需调用查询上传分片接口查询已经上传完的分片,并进行断点续传的操作;若文件从未传输过,则返回用户上传的 session。
第三步:设置 session 和 offset 参数,构造「逐个分片上传」请求,逐片上传后续文件。
第四步:循环执行第三步直到文件的分片数据上传完成。
第五步: 调用 finish 接口结束分片上传。

请求

语法示例:

POST /files/v2/12xxxxx/iaxxx/sample_bigfile.txt HTTP/1.1
Host: <Region>.file.myqcloud.com
Authorization: <MultiEffectSignature>
Content-Type: multipart/form-data
Content-Length: <ContentLength>

Authorization: <MultiEffectSignature> 多次有效签名(详细参见 签名算法 章节)
Content-Length: <ContentLength> RFC 2616 中定义的 HTTP 请求内容长度(字节)

请求参数

该请求的请求参数为空。

请求体

该请求的请求体如下:

--13a4446d91ecd2bb1cdfb4f5
Content-Disposition: form-data; name="offset"; filename="offset"

--59d13a4446d91ecd2bb1cdfb4f5
Content-Disposition: form-data; name="session"; filename="session"

--59d13a4446d91ecd2bb1cdfb4f5
Content-Disposition: form-data; name="filecontent"; filename="filecontent"
<此处省略内容>
--59d13a4446d91ecd2bb1cdfb4f5
Content-Disposition: form-data; name="op"; filename="op"
upload_slice_data

节点参数具体描述如下:

参数名称 描述 类型 必选
op 操作类型,填 “upload_slice_data” String
offset 本次分片位移 Number
session 唯一标识此文件传输过程的 id,由后台下发, 调用方透传 String
filecontent 文件内容 Binary
sha 全文的sha, 如果初始化分片上传操作指定了sha参数,那么分片上传也必须带上sha参数 String

响应

响应体

该响应体返回为 application/json 数据,包含完整节点数据的内容展示如下:

{
    "code":0,
    "message":"SUCCESS",
    "request_id":"NTliNzhlOWJfMTliMjk0MGNDg0ZF8xMTY3Yzc=",
    "data":
    {
    "datalen":1048576,
    "datamd5":"b6d81b360a5672d80c27430f39153e2c",
    "offset":101711872,
    "session":"8ad1d23f1b1f3452a1bda9bfbfcb81c4bb1cee616477a16d2b32ee179b41b3049eafc6a7337632e47baf12d"
    }
}

具体的参数描述如下:

参数名称 描述 类型
code 服务端返回码,如果没有发生任何错误取值为0;如果发生错误该参数指称具体的错误码。COS服务相关的错误码可以查看 COS 错误码汇总 Number
message 服务端提示内容,如果发生错误该字段将详细描述发生错误的情况。 String
request_id 该请求的唯一标识 id String
data 服务端返回的应答数据,该内容代表了接口返回的具体的业务数据。 Object

data 数据集参数描述:

参数名称 描述 类型
datalen 上传的分片内容的大小 Number
datamd5 上传内容的 md5 值 String
offset 请求包体里的传输的位移,调用方如果用多线程等方式传输,可以用来唯一确定本次分片结果 String
session 唯一标识此文件传输过程的 id Number

实际案例

请求

POST /files/v2/12xxxxx/iaxxx/sample_bigfile.txt HTTP/1.1
Host: gz.file.myqcloud.com
Connection: keep-alive
Accept-Encoding: gzip, deflate
Accept: */*
User-Agent: cos-python-sdk-v4
Authorization: rl3N9mF5KsEYuNvUTlzUwwOJWvVhPTEyNTE2Njg1Nzcmaz1BS0lEem9NLWllIcWxDelomZT0xNTA1MjAyMTA1JnQ9MTUwNT=
Content-Length: 1049252
Content-Type: multipart/form-data; boundary=d3a8159d13a4446d91ecd2bb1cdfb4f5

--d3a8159d13a4446d91ecd2bb1cdfb4f5
Content-Disposition: form-data; name="offset"; filename="offset"
0
--d3a8159d13a4446d91ecd2bb1cdfb4f5
Content-Disposition: form-data; name="session"; filename="session"
8ad1d23f1b1f3452a1bda9bfbfcb81c4bb1cee616477a16d28e7b32ee179b41be91800c621d93b4efa7fe52923febb654f1fc370fd72d
--d3a8159d13a4446d91ecd2bb1cdfb4f5
Content-Disposition: form-data; name="filecontent"; filename="filecontent"
<此处省略内容>
--d3a8159d13a4446d91ecd2bb1cdfb4f5
Content-Disposition: form-data; name="op"; filename="op"
upload_slice_data

响应

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 382
Connection: keep-alive
Date: Tue, 12 Sep 2017 07:36:59 GMT
Server: tencent-cos^M
x-cos-request-id: NTliNzhlOWJfMTliMjk0MGFfNDg0ZF8xMTY3Yzc=

{"code":0,
"message":"SUCCESS",
"request_id":"NTliNzhlOWJfMTliMjk0MGNDg0ZF8xMTY3Yzc=",
"data":{
"datalen":1048576,
"datamd5":"b6d81b360a5672d80c27430f39153e2c",
"offset":101711872,
"session":"8ad1d23f1b1f3452a1bda9bfbfcb81c4bb1cee616477a16d2b32ee179b41be91c5f726833a725dae76800c621d93b4efa7fe52923febb654f1fc370fd7c4b6e4165f810a3da7adf0f9d54802e782ba3d43049eafc6a7337632e47baf12d"}
}
}