SDK

本文以Python SDK为例,介绍如何使用SDK进行空间管理与文件管理。本文建议用户使用Python 2。

本文使用到的SDK-Python下载地址: SDK-Python

本源码包含使用 Python 对 AutoAI 的归档存储业务进行空间和内容管理的 API,适用于 Python 2

依赖的 Python Package

requests
unittest(仅test_uarchive目录下测试文件依赖)

文件目录说明

  • uarchive文件夹: SDK 的具体实现
  • setup.py: package 安装文件
  • setup.py: package 请求源设置(这里设置为阿里云的源)
  • test_uarchive 文件夹: 测试文件以及 demo 示例

使用方法

执行 %%python setup.py install%% 命令,安装为 egg 包后使用

快速准备

安装成功后,以文档上传为例,进入 test_uarchive 文件夹,预先假定您已经在控制台创建归档存储空间。
接下来设置 UARCHIEVE_PUBLIC_KEY,UARCHIEVE_PRIVATE_KEY,UARCHIEVE_VAULT 环境变量。 环境变量不同的操作系统有不同的设置方法。在使用 bash 的 shell 里面可以直接 %%export UARCHIEVE_VAULT="abcefg"%%

每个 test 脚本里面拿到 public_key, private_key, vault 这三个配置相关的环境变量。如下所示:

python public_key = os.getenv("UARCHIEVE_PUBLIC_KEY") private_key = os.getenv("UARCHIEVE_PRIVATE_KEY") #再控制台创建好空间后,把名字填入这里。 vault = os.getenv("UARCHIEVE_VAULT")

环境变量配置完成后执行 %%python test_putarchive.py%%
所有测试用例执行后,如果打印 OK,恭喜您,环境已经准备完毕,可以开始您的 SDK 使用之旅啦!

注意:部分测试用例存在依赖关系: 删除和激活存档测试用例要先执行上传存档。

功能说明

设置其他参数

python #from uarchive import config #设置上传host后缀,外网可用 .uarchive.ucloud.cn config.set_default(uploadsuffix='YOUR_UPLOAD_SUFFIX') #设置下载host后缀,比如CDN下载 .uarchive.ucloud.com.cn config.set_default(downloadsuffix='YOUR_DOWNLOAD_SUFFIX') #设置请求连接超时时间,单位为秒 config.set_default(connection_timeout=60) #设置私有vault下载链接有效期,单位为秒 config.set_default(expires=60)

设置日志文件

python #from uarchive import logger locallogname = '' #完整本地日志文件名 logger.set_log_file(locallogname)

HTTP 返回码说明

状态码 描述
200 文件或者数据上传成功
400 上传到不存在的空间
401 上传凭证错误
403 API公私钥错误
404 下载文件或数据不存在
416 文件范围请求不合法

获取文件列表

python from uarchive import getarchivefilelist getarchivefilelist_handler = getarchivefilelist.GetArchiveFileList(public_key, private_key) #通过 marker 循环获取文件列表,marker为空,从头拉取文件列表 marker = "" prefix = "*" vault = "hello" ret, resp = getarchivefilelist_handler.getarchivefilelist(vault, prefix, marker) assert resp.status_code == 200 logger.info(resp.content) assert len(ret['DataSet']) != 0 for item in ret['DataSet']: key = item['ArchiveName'].encode('utf-8') logger.info(key) nextMarker = ret['NextMarker'] logger.info('NextMarker is {0}'.format(nextMarker))

普通上传

python localfile = '' #本地文件名 put_key = '' #上传文件在空间中的名称 from uarchive import putarchive putarchive_handler = putarchive.PutArchive(public_key, private_key) # 普通上传文件至归档存储空间 ret, resp = putarchive_handler.putfile(vault, put_key, localfile, header=None) assert resp.status_code == 200 # 普通上传二进制数据流至归档存储空间 from io import BytesIO bio = BytesIO(u'你好'.encode('utf-8')) #二进制数据流 stream_key = '' #上传数据流在空间中的名称 ret, resp = putarchive_handler.putfile(vault, stream_key, bio)

文件下载

python public_savefile = '' #保存文件名 private_savefile = '' #保存文件名 range_savefile = '' #保存文件名 put_key = '' #文件在空间中的名称 stream_key = '' #文件在空间中的名称 from uarchive import downloadarchive downloadarchive_handler = downloadarchive.DownloadArchive(public_key, private_key) # 从归档存储空间下载文件 ret, resp = downloadarchive_handler.download_archive(vault, put_key, private_savefile) assert resp.status_code == 200

删除文件

python vault = '' #归档存储空间名称 delete_key = '' #文件在空间中的名称 from uarchive import deletearchive deletearchive_handler = deletearchive.DeleteArchive(public_key, private_key) # 删除归档存储空间的文件 ret, resp = deletearchive_handler.delete_archive(vault, delete_key) assert resp.status_code == 204

分片上传和断点续传

python vault = '' #归档存储空间名称 sharding_key = '' #上传文件在空间中的名称 localfile = '' #本地文件名 from uarchive import multipartuploadarchive multipartuploadarchive_handler = multipartuploadarchive.MultipartUploadArchive(public_key, private_key) # 分片上传一个全新的文件 ret, resp = multipartuploadarchive_handler.uploadfile(vault, sharding_key, localfile) while True: if resp.status_code == 200: # 分片上传成功 break elif resp.status_code == -1: # 网络连接问题,续传 ret, resp = multipartuploadarchive_handler.resumeuploadfile() else: # 服务或者客户端错误 print(resp.error) break # 分片上传一个全新的二进制数据流 from io import BytesIO bio = BytesIO(u'你好'.encode('utf-8')) ret, resp = multipartuploadarchive_handler.uploadstream(vault, sharding_key, bio) while True: if resp.status_code == 200: # 分片上传成功 break elif resp.status_code == -1: # 网络连接问题,续传 ret, resp = multipartuploadarchive_handler.resumeuploadstream() else: # 服务器或者客户端错误 print(resp.error) break

空间管理

python from uarchive import vaultmanager vaultmanager_handler = vaultmanager.VaultManager(public_key, private_key) # 创建新的vault vaultname = '' #创建的空间名称 ret, resp = vaultmanager.createvault(vaultname) assert resp.status_code == 200 # 删除vault vaultname = '' #待删除的空间名称 ret, resp = vaultmanager.deletevault(vaultname) print(ret) # 获取vault信息 vaultname = '' #待查询的空间名称 ret, resp = vaultmanager.describevault(vault) print(ret)