开通服务,创建空间用于文件存储,参考接入指引
点击下面链接下载 Python SDK (含 Demo)
Demo 为 SDK 压缩包下的 test.py
文件,填入开发者自己的 AK、SK 和 namespace 后,运行即可。
如何获取 AK 和 SK?
所有接口都是集成到 Want 类中。 返回值为 json 结构。根据 json 中 code 是否为200 判断是否调用成功。例如:
{ 'code': 200, 'name': 'test.jpg', 'url':'http://xxx/test/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' }
出错返回示例:
{ 'message': 'InternalError', 'code': 500, 'request_id': 'fe6b0382-c12d-413a-a70b-66745ae76442' }
上传策略可以参照RestAPI文档2.1节介绍。上传时必须在上传策略中指定空间名 namespace。
上传选项可以参照RestAPI文档2.6节介绍。上传时根据用户需要选择使用。
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) 小文件上传(文件路径)
upload_file( policy, dir, name, file_path, md5=None, meta={}, var={})
policy - 上传策略 dir - 上传文件的存储路径 name - 上传文件的存储文件名 file_path - 要上传的本地文件路径 md5 - 文件md5值(可选) meta - meta信息(可选) var - 自定义kv信息对(可选)
{ 'code': 200, 'name': 'test.jpg', 'url':'http://xxx/test/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' }
{ 'message': 'InternalError', 'code': 500, 'request_id': 'fe6b0382-c12d-413a-a70b-66745ae76442' }
2) 小文件上传(文件数据)
upload_content( policy, dir, name, content, md5=None, meta={}, var={})
policy - 上传策略 dir - 上传文件的存储路径 name - 上传文件的存储文件名 content - 要上传文件的输入流 md5 - 文件md5值(可选) meta - meta信息(可选) var - 自定义kv信息对(可选)
{ 'code': 200, 'name': 'test.jpg', 'url':'http://xxx/test/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' }
{ 'message': 'InternalError', 'code': 500, 'request_id': 'fe6b0382-c12d-413a-a70b-66745ae76442' }
如果开发者想要在代码中调用分片上传接口,控制并了解分片上传的细节,SDK中封装了分片上传相关的方法。建议上传大文件时采用此种方式。注:每块分片大小需大于100KB。
如下所示:
1) 初始化分片上传
multipart_init( policy, dir, name, content, md5=None, meta={}, var={})
policy - 上传策略 dir - 上传文件的存储路径 name - 上传文件的存储文件名 content - 要上传文件的输入流 md5 - 文件md5值(可选) meta - meta信息(可选) var - 自定义kv信息对(可选)
{ '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) 分片上传文件
multipart_upload(policy, id, upload_id, part_number, content, md5=None)
policy - 上传策略 id - 上传唯一id(初始化分片任务时返回) upload_id - 分片上传id(初始化分片任务时返回) part_number - 上传块编号(分片任务初始块编号为1,之后每次上传编号加1) content - 要上传文件的输入流 md5 - 完整文件的md5值(可选)
{ '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) 分片上传完成
multipart_complete(policy, id, upload_id, parts, md5=None)
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值(可选)
{ 'code': 200, 'name': 'test.jpg', 'url': 'http://xxx.image.alimmdn.com/test/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) 分片上传取消
multipart_cancel(policy, id, upload_id)
policy - 上传策略 id - 上传唯一id(初始化分片任务时返回) upload_id - 分片上传id(初始化分片任务时返回)