Python SDK

本源码包含使用Python对云知芯的对象存储业务进行空间和内容管理的API,适用于Python 2和Python 3

1. 依赖的Python Package

requests

2. 文件目录说明

  • ucloud文件夹: SDK的具体实现
  • setup.py: package安装文件
  • test文件夹: 测试文件以及demo示例

3. 使用方法

将ucloud目录复制到工程项目下

或者

python setup.py install

4. 功能说明

公共参数说明

public_key = ''      #账户公私钥中的公钥
 
private_key = ''    #账户公私钥中的私钥
 
# 设置参数
from ucloud.uvideo import config
 
    #设置云视频上传host,外网可用 uploadvideo.auto-ai.com.cn
    config.set_default(uploadsuffix='YOUR_UPLOAD_SUFFIX')
    #设置下载host后缀,比如CDN下载 .uvideo.auto-ai.com.cn
    config.set_default(downloadsuffix='YOUR_DOWNLOAD_SUFFIX')
    #设置请求连接超时时间,单位为秒
    config.set_default(connection_timeout=60)
    #设置私有space下载链接有效期,单位为秒
    config.set_default(expires=60)
 
 
# 设置日志文件
 
from ucloud import logger
 
locallogname = '' #完整本地日志文件名
logger.set_log_file(locallogname)

支持文件下载

  • demo程序
public_space = ''            #公共空间名称
 
private_space = ''            #私有空间名称
 
public_savefile = ''        #保存文件名
 
private_savefile = ''        #保存文件名
 
range_savefile = ''            #保存文件名
 
put_key = ''                #文件在空间中的名称
 
stream_key = ''                #文件在空间中的名称
 
from ucloud.uvideo import downloaduvideo
 
downloaduvideo_handler = downloaduvideo.DownloadUVideo(public_key, private_key)
 
# 从公共空间下载文件
ret, resp = downloaduvideo_handler.download_file(public_space, put_key, public_savefile, isprivate=False)
assert resp.status_code == 200
 
# 从私有空间下载文件
 
ret, resp = downloaduvideo_handler.download_file(private_space, put_key, private_savefile)
assert resp.status_code == 200
 
# 下载包含文件范围请求的文件
 
ret, resp = downloaduvideo_handler.download_file(public_space, put_key, range_savefile, isprivate=False, expires=300, content_range=(0, 50))
assert resp.status_code == 206
  • HTTP 返回状态码
状态码描述
200文件或者数据下载成功
206文件或者数据范围下载成功
400不存在的空间
403API公私钥错误
401下载签名错误
404下载文件或数据不存在
416文件范围请求不合法

支持删除文件

  • demo程序
public_space = ''                #公共空间名称
private_bucekt = ''                #私有空间名称
delete_key = ''                    #文件在空间中的名称
 
from ucloud.uvideo import deleteuvideo
 
deleteuvideo_handler = deleteuvideo.DeleteUVideo(public_key, private_key)
 
# 删除公共空间的文件
 
ret, resp = deleteuvideo_handler.deletefile(public_space, delete_key)
assert resp.status_code == 204
 
# 删除私有空间的文件
 
ret, resp = deleteuvideo_handler.deletefile(private_space, delete_key)
assert resp.status_code == 204
  • HTTP 返回状态码
状态码描述
204文件或者数据删除成功
403API公私钥错误
401签名错误

支持分片上传和断点续传

  • demo程序
public_space = ''        #公共空间名称
sharding_key = ''        #上传文件在空间中的名称
localfile = ''            #本地文件名
 
from ucloud.uvideo import multipartuploaduvideo
 
multipartuploaduvideo_handler = multipartuploaduvideo.MultipartUploadUVideo(public_key, private_key)
 
# 分片上传一个全新的文件
 
ret, resp = multipartuploaduvideo_handler.uploadfile(public_space, sharding_key, localfile)
while True:
if resp.status_code == 200: # 分片上传成功
    break
elif resp.status_code == -1:    # 网络连接问题,续传
    ret, resp = multipartuploaduvideo_handler.resumeuploadfile()
else:   # 服务或者客户端错误
    print(resp.error)
    break
 
# 分片上传一个全新的二进制数据流
 
from io import BytesIO
bio = BytesIO(u'你好'.encode('utf-8'))
ret, resp = multipartuploaduvideo_handler.uploadstream(public_space, sharding_key, bio)
while True:
if resp.status_code == 200:     # 分片上传成功
    break
elif resp.status_code == -1:    # 网络连接问题,续传
    ret, resp = multipartuploaduvideo_handler.resumeuploadstream()
else:   # 服务器或者客户端错误
    print(resp.error)
    break
  • HTTP 返回状态码
状态码描述
200文件或者数据上传成功
400上传到不存在的空间
403API公私钥错误
401上传凭证错误

空间管理

from ucloud.uvideo import spacemanager
 
spacemanager_handler = spacemanager.BucketManager(public_key, private_key)
 
# 创建新的space
spacename = '' #创建的空间名称
ret, resp = spacemanager.createspace(spacename, 'public')
assert resp.status_code == 200
 
# 删除space
spacename = '' #待删除的空间名称
ret, resp = spacemanager.deletespace(spacename)
print(ret)
 
# 获取space信息
spacename = '' # 待查询的空间名称
ret, resp = spacemanager.describespace(public_space)
print(ret)
 
# 更改space属性
spacename = '' # 待更改的私有空间名称
spacemanager.updatespace(spacename, 'public'):
 
# 获得空间文件列表
spacename = '' #待查询的空间名称
offset = 0      #文件列表起始位置
limit = 20      #获取文件数量
ret, resp = spacemanager.getfilelist(spacename, offset, limit)
print(ret)