又拍云存储 Python SDK,基于 又拍云存储 HTTP REST API 接口 开发。
不再兼容 1.x 的版本,相比旧版本,新版接口设计和实现更加 Pythonic ,且代码风格完全符合 pep8 规范。
python setup.py install
可选依赖: requests
import upyun
up = upyun.UpYun('bucket', 'username', 'password', timeout=30, endpoint=upyun.ED_AUTO)
其中,参数 bucket
为空间名称,username
和 password
分别为授权操作员帐号和密码,必选。
参数 timeout
为 HTTP 请求超时时间,默认 60 秒,可选。
以及,根据国内的网络情况,又拍云存储 API 目前提供了电信、联通网通、移动铁通三个接入点,在初始化时可由参数 endpoint
进行设置,其可选的值有:
upyun.ED_AUTO 根据网络条件自动选择接入点,默认
upyun.ED_TELECOM 电信接入点
upyun.ED_CNC 联通网通接入点
upyun.ED_CTT 移动铁通接入点
默认设置为 upyun.ED_AUTO
, 但是我们推荐根据服务器网络状况,手动设置合理的接入点以获取最佳的访问速度。同时,也可通过:
up.endpoint = upyun.ED_TELECOM
在对象使用过程中更改。
up.put('/upyun-python-sdk/ascii.txt', 'abcdefghijklmnopqrstuvwxyz\n')
其中,方法 up.put
默认已开启相应目录的自动创建。
headers = { "x-gmkerl-rotate": "180" }
with open('unix.png', 'rb') as f:
res = up.put('/upyun-python-sdk/xinu.png', f, checksum=True, headers=headers)
其中,参数 checksum
和 headers
可选,前者默认 False,表示不进行 MD5 校验; 后者可根据需求设置自定义 HTTP Header,例如作图参数 x-gmkerl-*, 具体请参考 标准 API 上传文件 。
上传成功,如果当前空间是图片空间,那么 res
返回的是一个包含图片长、宽、帧数和类型信息的 Python Dict 对象 (文件空间,返回一个空的 Dict):
{'frames': '1', 'width': '1280', 'file-type': 'PNG', 'height': '800'}
上传失败,则抛出相应异常。
res = up.get('/upyun-python-sdk/ascii.txt')
下载成功,返回文件内容; 失败则抛出相应异常。
with open('xinu.png', 'wb') as f:
up.get('/upyun-python-sdk/xinu.png', f)
下载成功,返回 Python None
对象; 失败则抛出相应异常。
up.mkdir('/upyun-python-sdk/temp/')
创建成功,返回 Python None
对象; 失败则抛出相应异常。
up.delete('/upyun-python-sdk/xinu.png')
up.delete('/upyun-python-sdk/temp/')
删除成功,返回 Python None
对象; 失败则抛出相应异常。注意删除目录时,必须保证目录为空。
res = up.getlist('/upyun-python-sdk/')
获取成功,返回一个包含该目录下所有目录或文件条目信息的 Python List 对象:
[{'time': '1363247311', 'type': 'F', 'name': 'temp', 'size': '0'}, {'time': '1363247311', 'type': 'N', 'name': 'xinu.png', 'size': '477908'}]
其中每个条目信息是又是一个 Python Dict 对象:
item = res[0]
print item['name'] # 文件名称
print item['type'] # 文件类型
print item['size'] # 文件大小
print item['time'] # 创建时间
获取失败,则抛出相应的异常。该方法默认获取根目录列表信息。
res = up.getinfo('/upyun-python-sdk/xinu.png')
print res['file-type']
print res['file-size']
print res['file-date']
获取成功,返回一个 Python Dict 对象; 失败则抛出相应异常。
res = up.usage('/upyun-python-sdk/')
获取成功,返回指定目录下的空间使用量,单位 Bytes; 失败则抛出相应异常。默认返回根目录的使用情况。
try:
res = up.usage('/upyun-python-sdk/')
...
except upyun.UpYunServiceException as se:
print "Except an UpYunServiceException ..."
print "HTTP Status Code: " + str(se.status)
print "Error Message: " + se.msg + "\n"
except upyun.UpYunClientException as ce:
print "Except an UpYunClientException ..."
print "Error Message: " + ce.msg + "\n"
其中, UpYunServiceException
主要是又拍云存储端返回的错误信息,具体错误代码请参考 标准 API 错误代码表; 而 UpYunClientException
则主要是一些客户端环境的异常,例如客户端网络超时等。
具体请参考 demo/try.py
的代码,建议可在修改以下代码后直接运行该脚本,观察其输出情况,以便对整个 Python SDK 接口有个大致的了解:
# ------------------ CONFIG ---------------------
BUCKETNAME = 'bucketname'
USERNAME = 'username'
PASSWORD = 'password'
# -----------------------------------------------