开通服务,创建空间用于文件存储,参考接入指引
点击下面链接下载 Python SDK (含 Demo)
Demo 为 SDK 压缩包下的 test.py
文件,填入开发者自己的 AK、SK 和 namespace 后,运行即可。
如何获取 AK 和 SK?
所有接口都是集成到 Want 类中。 返回值为 json 结构。根据 json 中 code 是否为200 判断是否调用成功。例如:
1 2 3 4 5 6 7 8 9 10 11 12 | { 'code' : 200 , 'name' : 'test.jpg' , 'request_id' : '07db0514-d7bb-4785-8b34-6697e3aee52f' , 'file_size' : '1056344' , 'file_modified' : 1437535493816 , 'e_tag' : '81FCC17FBB190BCA4EC1E9A3DEF02E57' , 'message' : 'OK' , 'mime_type' : 'image/jpeg' , 'dir' : '/test' } |
出错返回示例:
1 2 3 4 5 | { 'message' : 'InternalError' , 'code' : 500 , 'request_id' : 'fe6b0382-c12d-413a-a70b-66745ae76442' } |
上传策略可以参照RestAPI文档2.1节介绍。上传时必须在上传策略中指定空间名 namespace。
上传选项可以参照RestAPI文档2.6节介绍。上传时根据用户需要选择使用。
1 2 | from want import Wan image = Want(ak, sk, type, upload_endpoint, manage_endpoint) |
初始化传入参数:
AK: 开发者的AccessKeyId。
SK: 开发者的AccessKeySecret。
Type: 开发者的服务类型(即AK/SK的颁发类型,百川用户都是TOP),可不填写。
upload_endpoint 和 manage_endpoint 一般不需要填写,使用默认值即可。
用户 AK/SK 的获取方式请参照第 3 节 Demo 中的描述。
指定需要上传的文件路径,调用上传接口完成文件上传。
建议10M以下的文件采用此种方式。调用示例如下:
1) 小文件上传(文件路径)
1 | upload_file( policy, dir, name, file_path, md5=None, meta={}, var={}) |
1 2 3 4 5 6 7 | policy - 上传策略 dir - 上传文件的存储路径 name - 上传文件的存储文件名 file_path - 要上传的本地文件路径 md5 - 文件md5值(可选) meta - meta信息(可选) var - 自定义kv信息对(可选) |
1 2 3 4 5 6 7 8 9 10 11 12 | { 'code' : 200 , 'name' : 'test.jpg' , 'request_id' : '07db0514-d7bb-4785-8b34-6697e3aee52f' , 'file_size' : '1056344' , 'file_modified' : 1437535493816 , 'e_tag' : '81FCC17FBB190BCA4EC1E9A3DEF02E57' , 'message' : 'OK' , 'mime_type' : 'image/jpeg' , 'dir' : '/test' } |
1 2 3 4 5 | { 'message' : 'InternalError' , 'code' : 500 , 'request_id' : 'fe6b0382-c12d-413a-a70b-66745ae76442' } |
2) 小文件上传(文件数据)
1 | upload_content( policy, dir, name, content, md5=None, meta={}, var={}) |
1 2 3 4 5 6 7 | policy - 上传策略 dir - 上传文件的存储路径 name - 上传文件的存储文件名 content - 要上传文件的输入流 md5 - 文件md5值(可选) meta - meta信息(可选) var - 自定义kv信息对(可选) |
1 2 3 4 5 6 7 8 9 10 11 12 | { 'code' : 200 , 'name' : 'test.jpg' , 'request_id' : '07db0514-d7bb-4785-8b34-6697e3aee52f' , 'file_size' : '1056344' , 'file_modified' : 1437535493816 , 'e_tag' : '81FCC17FBB190BCA4EC1E9A3DEF02E57' , 'message' : 'OK' , 'mime_type' : 'image/jpeg' , 'dir' : '/test' } |
1 2 3 4 5 | { 'message' : 'InternalError' , 'code' : 500 , 'request_id' : 'fe6b0382-c12d-413a-a70b-66745ae76442' } |
如果开发者想要在代码中调用分片上传接口,控制并了解分片上传的细节,SDK中封装了分片上传相关的方法。建议上传大文件时采用此种方式。注:每块分片大小需大于100KB。
如下所示:
1) 初始化分片上传
1 | multipart_init( policy, dir, name, content, md5=None, meta={}, var={}) |
1 2 3 4 5 6 7 | policy - 上传策略 dir - 上传文件的存储路径 name - 上传文件的存储文件名 content - 要上传文件的输入流 md5 - 文件md5值(可选) meta - meta信息(可选) var - 自定义kv信息对(可选) |
1 2 3 4 5 6 7 8 9 10 11 | { 'code' : 200 , 'name' : 'test.jpg' , 'part_number' : 1 , //上传块编号 分片初始化为1 'id' : 'ae794009-d5dc-43a7-937a-612f2e42b04d' , //上传唯一id,上传分片内容时作为参数传递 'upload_id' : '45DED2452BB348E7865FF56CE8C603E2' , //分片上传任务id,上传分片内容时作为参数传递 'request_id' : '38b6a5fb-9ed7-419d-ae52-43f393561b89' , 'message' : 'OK' , 'dir' : '/test' , 'e_tag' : '61C245076C1B75BB4705A172C0605FA3' //上传部分的md5值,分片任务完成时需要用该字段验证 } |
2) 分片上传文件
1 | multipart_upload(policy, id, upload_id, part_number, content, md5=None) |
1 2 3 4 5 6 | policy - 上传策略 id - 上传唯一id(初始化分片任务时返回) upload_id - 分片上传id(初始化分片任务时返回) part_number - 上传块编号(分片任务初始块编号为 1 ,之后每次上传编号加 1 ) content - 要上传文件的输入流 md5 - 完整文件的md5值(可选) |
1 2 3 4 5 6 7 8 9 10 11 | { 'code' : 200 , 'name' : 'test.jpg' , 'part_number' : 1 , //上传块编号 分片初始化为1 'id' : 'ae794009-d5dc-43a7-937a-612f2e42b04d' , //上传唯一id,上传分片内容时作为参数传递 'upload_id' : '45DED2452BB348E7865FF56CE8C603E2' , //分片上传任务id,上传分片内容时作为参数传递 'request_id' : '38b6a5fb-9ed7-419d-ae52-43f393561b89' , 'message' : 'OK' , 'dir' : '/test' , 'e_tag' : '61C245076C1B75BB4705A172C0605FA3' //上传部分的md5值,分片任务完成时需要用该字段验证 } |
3) 分片上传完成
1 | multipart_complete(policy, id, upload_id, parts, md5=None) |
1 2 3 4 5 6 | policy - 上传策略 id - 上传唯一id(初始化分片任务时返回) upload_id - 分片上传id(初始化分片任务时返回) parts - 每个分片md5值组成的json数组,需要进行base64的编码.例如:base64.urlsafe_b64encode(json.dumps([{ 'e_tag' : '分片1返回的e_tag' , 'part_number' : 1 }, { 'e_tag' : '分片2返回的e_tag' , 'part_number' : 2 }, { 'e_tag' : '分片3返回的e_tag' , 'part_number' : 3 }])) md5 - 完整文件的md5值(可选) |
1 2 3 4 5 6 7 8 9 10 11 12 | { 'code' : 200 , 'name' : 'test.jpg' , 'file_size' : '1056344' , 'file_modified' : 1437967420625 , 'upload_id' : '45DED2452BB348E7865FF56CE8C603E2' , 'request_id' : '8628d171-4953-4704-8443-f89e0790a0db' , 'message' : 'OK' , 'mime_type' : 'image/jpeg' , 'dir' : '/test' } |
3) 分片上传取消
1 | multipart_cancel(policy, id, upload_id) |
1 2 3 | policy - 上传策略 id - 上传唯一id(初始化分片任务时返回) upload_id - 分片上传id(初始化分片任务时返回) |