开通服务,创建空间用于文件存储,参考接入指引
点击下面链接下载 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(初始化分片任务时返回)