OAS的使用——Python SDK

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
日志服务 SLS,月写入数据量 50GB 1个月
简介: 当需要向OAS备份归档的文件量非常大的时候,通过web控制台和命令行工具来完成是不可能的,这时候需要使用OAS提供的SDK编写操作代码来实现

OAS的使用——Python SDK

[TOC]

当需要向OAS备份归档的文件量非常大的时候,通过web控制台和命令行工具来完成是不可能的,这时候需要使用OAS提供的SDK编写操作代码来实现,SDK包括Python SDK和Java SDK,本文主要讲解Python SDK, Java SDK的使用可以参考官方文档中的开发者工具和[最佳实践](https://docs.aliyun.com/?spm=5176.383338.201.102.NNmH36#/pub/oas/best_practice/java_sdk_demo
)。

使用需求

  1. 使用Python SDK编写脚本上传100个小文件(1M-32M),上传10个大文件(1G-5G)
  2. 使用Python SDK编写脚本查询上传后的Vault信息
  3. 使用Python SDK编写脚本下载所有的上传文件
  4. 使用Python SDK编写脚本删除已上传的所有文件

Python SDK概述

Python SDK是对API的一层封装,方便用户编写Python脚本来实现各种操作。官方文档中提到,Python SDK包含低级接口和高级接口。

低级接口是对API的最直接封装,在使用低级接口时必须对照API使用手册进行开发,需要仔细阅读API手册,对API中描述的各种参数需要比较清楚,因此使用灵活但是不够高效。

高级接口是对低级接口的封装,降低了用户的学习量,提高开发效率,而且代码也比低级接口更加清晰,因此官方建议一般用户都使用高级接口,在极个别高级接口不太灵活操作的地方使用低级接口。

本文所有代码均基于Python SDK的高级接口编写。

准备工作

根据使用需求,我需要准备好待上传的文件以及配置。
写个函数生成需要的文件:

def genfile(filePath, size):
    splitSize = 100 
    with open(filePath, 'w') as fd:
        if size <= splitSize:
            fd.seek(1024*1024*size - 10)
            randomString = "".join(random.sample("abcedfghigklmnopqrstuvwxyz", 10))
            fd.write(randomString)
        else:       
            for i in range(size/splitSize):
                fd.seek((i + 1)*splitSize*1024*1024 - 10)
                randomString = "".join(random.sample("abcedfghigklmnopqrstuvwxyz", 10))
                fd.write(randomString)

            if size % splitSize != 0:
                fd.seek(size*1024*1024 - 10)
                randomString = "".join(random.sample("abcedfghigklmnopqrstuvwxyz", 10))
                fd.write(randomString)

def generate_files():

    file_index = 0
    file_prefix = 'test_file_%s'
    file_dir = 'files'
    for i in xrange(0, 105):
        if i < 100:
            size = random.randint(1, 32)
        else:
            size = random.randint(1024, 5 * 1024)

        path = os.path.join(file_dir, file_prefix % file_index)
        genfile(path, size)
        file_index += 1

使用一个简单的配置文件来存放配置,然后读取这个配置文件:
20

使用下面代码读取配置:

class ConfHolder(object):

    def __init__(self, conf_path):
        self.conf_path = conf_path
        self.parser = ConfigParser.SafeConfigParser()
        self._read_conf()

    def _read_conf(self):
        try:
            self.parser.read(self.conf_path)
            self.host = self.parser.get('access', 'host')
            self.id = self.parser.get('access', 'id')
            self.key = self.parser.get('access', 'key')
            self.vault_name = self.parser.get('access', 'vault_name')
            self.local_path = self.parser.get('files', 'local_path')
            self.download_path = self.parser.get('files', 'download_path')

        except Exception, e:
            log.exception(e)
            print "Read Config File Error!"
            print e
            sys.exit(1)

Python SDK的使用

Python SDK中几个重要对象

Python SDK的高级接口抽象出来几个重要的对象:Vault、Uploader和Job。使用这三个对象基本可以完成常见的工作。实际上,Vault是所有操作的入口,更加直接的说法,我们在使用Python SDK的时候,只需要import两个包:

from oas.oas_api import OASAPI
from oas.ease.vault import Vault

其中Uploader和Job对象在Vault的类方法中生成。

重要的方法

创建Vault:

# 创建 Vault
vault = Vault.create_vault(api, '[Vault Name]')

上传Archive:

archive_id = vault.upload_archive('[File Path]')

下载 Archive:

#retrieve_archive生成一个Job类型的对象
#Job对象的具体方法和属性可以查看官方文档
job = vault.retrieve_archive('[Archive ID]')
job.download_to_file('[File Path]')

初始化multipart upload

#initiate_uploader 生成一个Uploader对象,用于进行multipart upload
#Uploader对象的具体方法和属性可以查看官方文档
uploader = vault.initiate_uploader('[File Path]')

下面使用这些对象和方法完成需求工作。

实现代码

class Task有四个方法: upload, download,info, delete, 分别完成上传、下载、查询和删除工作。
upload上传的文件包含100个小文件和5个大文件,大文件采用multipart方式上传,对于上传失败的multipart,还将调用resume来恢复上传,保存上传成功文件的filename和archive_id;
download将上传成功的文件下载至另外一个目录。
info使用retrieve_inventory来查询信息。
delete将已上传的所有文件删除。

注意:
由于OAS的元数据信息并非是实时更新,而且job调度是异步的,因此整个程序不会马上返回,可能会长时间阻塞,因此建议将程序写成Damon。

代码

代码包含配置文件(配置host, id以及key等)、生成文件代码和OAS SDK使用代码,另外提供了一个Python的daemonize函数,使用daemonize函数后台化。脚本会将中间信息打到日志中。

日志内容:
21
22

下载后的文件:
23

代码下载:

总结

在阅读API使用手册之后对整个系统的操作有比较清晰认识之后,参考官方文档的示例代码和SDK说明文档,OAS服务的使用非常容易上手。

目录
相关文章
|
3月前
|
存储 人工智能 开发工具
AI助理化繁为简,速取代码参数——使用python SDK 处理OSS存储的图片
只需要通过向AI助理提问的方式输入您的需求,即可瞬间获得核心流程代码及参数,缩短学习路径、提升开发效率。
1461 4
AI助理化繁为简,速取代码参数——使用python SDK 处理OSS存储的图片
|
23天前
|
弹性计算 安全 开发工具
灵码评测-阿里云提供的ECS python3 sdk做安全组管理
批量变更阿里云ECS安全组策略(批量变更)
|
4月前
|
Kubernetes API 开发工具
【Azure Developer】通过SDK(for python)获取Azure服务生命周期信息
需要通过Python SDK获取Azure服务的一些通知信息,如:K8S版本需要更新到指定的版本,Azure服务的维护通知,服务处于不健康状态时的通知,及相关的操作建议等内容。
59 18
|
5月前
|
数据采集 开发工具 Python
海康威视工业相机SDK+Python+PyQt开发数据采集系统(支持软件触发、编码器触发)
该系统基于海康威视工业相机SDK,使用Python与PyQt开发,支持Gige与USB相机设备的搜索及双相机同时显示。系统提供软件触发与编码器触发模式,并可在数据采集过程中实时保存图像。此外,用户可以调节曝光时间和增益,并进行信息输入,这些信息将被保存至配置文件以便下次自动加载。参数调节与实时预览等功能进一步增强了系统的实用性。
346 1
|
5月前
|
网络安全 开发工具 Python
【Azure事件中心】使用Python SDK(Confluent)相关方法获取offset或lag时提示SSL相关错误
【Azure事件中心】使用Python SDK(Confluent)相关方法获取offset或lag时提示SSL相关错误
|
5月前
|
API 开发工具 网络架构
【Azure Developer】使用Python SDK去Azure Container Instance服务的Execute命令的疑问解释
【Azure Developer】使用Python SDK去Azure Container Instance服务的Execute命令的疑问解释
【Azure Developer】使用Python SDK去Azure Container Instance服务的Execute命令的疑问解释
|
5月前
|
机器学习/深度学习 开发工具 Python
【Azure 应用服务】使用Python Azure SDK 来获取 App Service的访问限制信息(Access Restrictions)
【Azure 应用服务】使用Python Azure SDK 来获取 App Service的访问限制信息(Access Restrictions)
|
5月前
|
JavaScript 前端开发 Java
[Android][Framework]系统jar包,sdk的制作及引用
[Android][Framework]系统jar包,sdk的制作及引用
133 0
|
2月前
|
Java Linux API
Android SDK
【10月更文挑战第21天】
92 1
|
3月前
|
程序员 开发工具 Android开发
Android|使用阿里云推流 SDK 实现双路推流不同画面
本文记录了一种使用没有原生支持多路推流的阿里云推流 Android SDK,实现同时推送两路不同画面的流的方法。
71 7