OAS的使用——Python SDK

本文涉及的产品
对象存储 OSS,20GB 3个月
日志服务 SLS,月写入数据量 50GB 1个月
对象存储 OSS,内容安全 1000 次 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
AI 代码解读

使用一个简单的配置文件来存放配置,然后读取这个配置文件:
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)
AI 代码解读

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
AI 代码解读

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

重要的方法

创建Vault:

# 创建 Vault
vault = Vault.create_vault(api, '[Vault Name]')
AI 代码解读

上传Archive:

archive_id = vault.upload_archive('[File Path]')
AI 代码解读

下载 Archive:

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

初始化multipart upload

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

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

实现代码

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服务的使用非常容易上手。

目录
打赏
0
0
0
2
2967
分享
相关文章
【Azure Service Bus】使用Python SDK创建Service Bus Namespace资源(中国区)
本文介绍了如何使用Python SDK创建Azure Service Bus Namespace资源。首先,通过Microsoft Entra ID注册应用获取Client ID、Client Secret和Tenant ID,完成中国区Azure认证。接着,初始化ServiceBusManagementClient对象,并调用`begin_create_or_update`方法创建资源。
88 29
AI助理化繁为简,速取代码参数——使用python SDK 处理OSS存储的图片
只需要通过向AI助理提问的方式输入您的需求,即可瞬间获得核心流程代码及参数,缩短学习路径、提升开发效率。
1595 5
AI助理化繁为简,速取代码参数——使用python SDK 处理OSS存储的图片
【AI大模型】使用Python调用DeepSeek的API,原来SDK是调用这个,绝对的一分钟上手和使用
本文详细介绍了如何使用Python调用DeepSeek的API,从申请API-Key到实现代码层对话,手把手教你快速上手。DeepSeek作为领先的AI大模型,提供免费体验机会,帮助开发者探索其语言生成能力。通过简单示例代码与自定义界面开发,展示了API的实际应用,让对接过程在一分钟内轻松完成,为项目开发带来更多可能。
【Azure Developer】编写Python SDK代码实现从China Azure中VM Disk中创建磁盘快照Snapshot
本文介绍如何使用Python SDK为中国区微软云(China Azure)中的虚拟机磁盘创建快照。通过Azure Python SDK的Snapshot Class,指定`location`和`creation_data`参数,使用`Copy`选项从现有磁盘创建快照。代码示例展示了如何配置Default Azure Credential,并设置特定于中国区Azure的`base_url`和`credential_scopes`。参考资料包括官方文档和相关API说明。
【Azure Developer】通过SDK(for python)获取Azure服务生命周期信息
需要通过Python SDK获取Azure服务的一些通知信息,如:K8S版本需要更新到指定的版本,Azure服务的维护通知,服务处于不健康状态时的通知,及相关的操作建议等内容。
105 18
Python 高级编程与实战:深入理解性能优化与调试技巧
本文深入探讨了Python的性能优化与调试技巧,涵盖profiling、caching、Cython等优化工具,以及pdb、logging、assert等调试方法。通过实战项目,如优化斐波那契数列计算和调试Web应用,帮助读者掌握这些技术,提升编程效率。附有进一步学习资源,助力读者深入学习。
用Python编程基础提升工作效率
一、文件处理整明白了,少加两小时班 (敲暖气管子)领导让整理100个Excel表?手都干抽筋儿了?Python就跟铲雪车似的,哗哗给你整利索!
89 11

云存储

+关注

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问