注意
描述
使用 API 对大于 20 MB 的文件进行逐片上传之前,需要先使用「初始化分片上传」API,从腾讯云获取到分片上传所需的参数(session 和 slice_size)。
前置条件:指定目录已存在,且已获得分片上传所需参数(session 和 slice_size)。
当初始化分片上传返回-4019错误的时候,用户需调用此接口查询分片的断点和session,进行续传操作。
分片上传使用流程说明
1. 发送「初始化分片上传」请求。
2. 腾讯云会判断文件的上传状态,若未完成上传,会返回-4019错误,用户需调用查询上传分片接口查询已经上传完的分片,并进行断点续传的操作;若文件从未传输过,则返回用户上传的session。
3. 设置 session 和 offset 参数,构造「逐个分片上传」请求,逐片上传后续文件。
4. 循环执行第 3 步直到文件的分片数据上传完成。
5. 调用 finish 接口结束分片上传。
请求
请求语法
POST /files/v2/<appid>/<bucket_name>[/dir_name]/<file_name> HTTP/1.1Host: <Region>.file.myqcloud.comContent-Type: multipart/form-dataAuthorization: <multi_effect_signature>
说明
<箭头括号>表示必须替换为有效值的变量,[英文方括号]表示可选的命令或参数。
请求内容
参数名称 | 必选 | 类型 | 描述 |
op | 是 | String | 操作类型,填 “upload_slice_list” |
返回
返回内容
参数名称 | 必选 | 类型 | 描述 |
code | 是 | Int | 服务端返回码 |
message | 是 | String | 服务端提示内容 |
data | 是 | 数据集合 | 服务器返回的应答数据 |
data 数据集合:
参数名称 | 必选 | 类型 | 描述 |
session | 否 | String | 唯一标识此文件传输过程的 ID,命中秒传则不携带 |
slice_size | 否 | Int | 分片大小,单位为 Byte。 有效值:524288 (512 KB),1048576 (1 MB),2097152 (2 MB),3145728 (3 MB) |
listparts | 否 | String | 完成上传的文件的分片信息 |
access_url | 否 | String | 文件已上传完成返回,通过 CDN 访问该文件的资源链接(访问速度更快) |
resource_path | 否 | String | 文件已上传完成返回,该文件在COS中的相对路径名,可作为其 ID 标识。 格式 /appid/bucket/filename。推荐业务端存储 resource_path ,然后根据业务需求灵活拼接资源 url(通过 CDN 访问 COS 资源的 url 和直接访问 COS 资源的 url 不同) |
source_url | 否 | String | 文件已上传完成返回,(不通过 CDN )直接访问 COS 的资源链接 |
url | 否 | String | 文件已上传完成返回,操作文件的 url。业务端可以将该 url 作为请求地址来进一步操作文件,对应 API:查询文件属性、更新文件、删除文件、移动文件中的请求地址。 |
说明
腾讯云对象存储会默认为每个资源生成经 CDN 的访问链接 access_url,当业务端尚未开通 CDN 时,仍然可以获得该链接,但是无法访问。
listparts 数据集合:
参数名称 | 必选 | 类型 | 描述 |
datalen | 是 | Int | 分片大小 |
offset | 是 | Int64 | 分片偏移 |
示例
逐个分片上传
请求
POST /files/v2/10055004/accesslog/testfolder/111.txt HTTP/1.1Host: sh.file.myqcloud.comAuthorization: E+w/b7r3hVCOX9Dkc0sD0gU6ycFhPTEwMDU1MDA0Jms9QUtJRHpuOHd3S3VYanhpeFFBa1JCQzJEUlhCdFBkN0NybEpRJmU9MTQ3MjY0OTYwOCZ0PTE0NzI2NDk0Mjgmcj01NTgzMDA2MzgmZj0mYj1hY2Nlc3Nsb2c=Content-Length: 154Content-Type: multipart/form-data; boundary=----------------------------2b804029035c------------------------------2b804029035cContent-Disposition: form-data; name="op"upload_slice_list------------------------------2b804029035c--
返回
HTTP/1.1 200 OKContent-Type: application/json; charset=utf-8Content-Length: 304Date: Wed Aug 31 21:19:40 2016Server: tencent-cos{"code": 0,"message": "SUCCESS","data": {"filesize": 104857600,"listparts": [{"datalen": 524288,"offset": 0},{"datalen": 524288,"offset": 524288},{"datalen": 524288,"offset": 1048576}],"session": "4331155f7e26e5fc7f032e7d1dac56644b68681d6c4260e39db441604773c883ca2b5ed5f44ab5bd44f81f9ee383165f","slice_size": 524288}}
文件已经上传完成的情况
请求
POST /files/v2/10055004/accesslog/testfolder/111.txt HTTP/1.1Host: sh.file.myqcloud.comAuthorization: 5/6eYiDGOxpd/YRDTscWG4Y265hhPTEwMDU1MDA0Jms9QUtJRHpuOHd3S3VYanhpeFFBa1JCQzJEUlhCdFBkN0NybEpRJmU9MTQ3MjY0OTQ4OCZ0PTE0NzI2NDkzMDgmcj0xNDA1ODgwNTk0JmY9JmI9YWNjZXNzbG9nContent-Length: 154Content-Type: multipart/form-data; boundary=----------------------------72e1396a1d85------------------------------72e1396a1d85Content-Disposition: form-data; name="op"upload_slice_list------------------------------72e1396a1d85--
返回
HTTP/1.1 200 OKContent-Type: application/json; charset=utf-8Content-Length: 434Date: Wed Aug 31 21:15:08 2016Server: tencent-cos{"code": 0,"message": "SUCCESS","data": {"access_url": "http://accesslog-10055004.file.myqcloud.com/testfolder/111.txt","preview_url": "http://accesslog-10055004.preview.myqcloud.com/testfolder/111.txt?cmd=txt_preview","resource_path": "/10055004/accesslog/testfolder/111.txt","source_url": "http://accesslog-10055004.cossh.myqcloud.com/testfolder/111.txt","url": "http://sh.file.myqcloud.com/files/v2/10055004/accesslog/testfolder/111.txt"}}