Python 阿里云OSS文件上传下载与文件删除及检索示例

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,内容安全 1000次 1年
对象存储 OSS,恶意文件检测 1000次 1年
简介: Python 阿里云OSS文件上传下载与文件删除及检索示例

阿里云OSS文件上传下载与文件删除及检索示例

实践环境

运行环境:

Python 3.5.4

CentOS Linux release 7.4.1708 (Core)/Win10

需要安装以下类库:

pip3 install setuptools_rust1.1.2
pip3 install Crypto
1.4.1 # Win10下,安装后,需要更改 site-packages下crypto包名称为Crypto

pip3 install cryptography3.3.2 # 注意,如果不指定版本,安装oss2时会报错:error: can't find Rust compiler
pip3 install oss2
2.15.0

上传本地文件到阿里云OSS示例

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import traceback
import os
# 批量上传文件到OSS
def upload_files(bucket, target_dir_path, exclusion_list=[]):
    oss_objects_path = []
    target_dir_path = os.path.normpath(target_dir_path).replace('\\', '/')
    for root, dirs, files in os.walk(target_dir_path):
        for file in files:
            target_file_path = os.path.normpath(os.path.join(root, file))
            target_file_relative_path = target_file_path.replace('\\', '/').replace(target_dir_path, '').lstrip('/')
            if target_file_relative_path in exclusion_list:
                continue
            object_path = 'f2b/artifacts/web-admin-react/%s' % target_file_relative_path
            upload_file(bucket, target_file_path, object_path)
            oss_objects_path.append(object_path)
    return oss_objects_path
# 上传文件到OSS
def upload_file(bucket, target_file_path, object_path):
    with open(target_file_path, 'rb') as fileobj:
        res = bucket.put_object(object_path, fileobj) # object_path为Object的完整路径,路径中不能包含Bucket名称。
        if res.status != 200:
            raise Exception('upload %s error,status:%s' % (target_file_path, res.status))
if __name__ == '__main__':
    try:
        import oss2
        auth = oss2.Auth('ossAccessKeyId', 'ossAccessKeySecret')
        # oss2.Bucket(auth, endpoint, bucket_name)
        # endpoint填写Bucket所在地域对应的endpoint,bucket_name为Bucket名称。以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。
        bucket = oss2.Bucket(auth, 'https://oss-cn-shenzhen.aliyuncs.com', 'exampleBucket')
        oss_objects_path = []  # 存放上传成功文件对应的OSS对象相对路径
        target_path = 'D:\\artifact-eb34ea94.tar.gz'
        if not os.path.exists(target_path):
            print('success:false,待上传路径(%s)不存在' %  target_path)
            exit(0)
        if os.path.isdir(target_path): # 如果为目录
            oss_objects_path = upload_files(bucket, target_path)
        else:
            object_path = 'f2b/artifacts/web-admin-react/artifact-eb34ea94.tar.gz'
            upload_file(bucket, target_path, object_path)
            oss_objects_path.append(object_path)
        print(','.join(oss_objects_path))
    except Exception:
        print('success:false,%s' % traceback.format_exc())

参考连接:

https://help.aliyun.com/document_detail/88426.htm?spm=a2c4g.11186623.0.0.9e7e7dbbsOWOh6#t22317.html

https://help.aliyun.com/document_detail/31848.html

下载阿里云OSS文件对象到本地文件示例

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import traceback
if __name__ == '__main__':
    try:
        import oss2
         auth = oss2.Auth('ossAccessKeyId', 'ossAccessKeySecret')
        # oss2.Bucket(auth, endpoint, bucket_name)
        # endpoint填写Bucket所在地域对应的endpoint,bucket_name为Bucket名称。以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。
        bucket = oss2.Bucket(auth, 'https://oss-cn-shenzhen.aliyuncs.com', 'exampleBucket')
        target_file_local_path = 'D:\\artifacts-17a86f.tar.gz' # 本地文件路径
        oss_object_path = 'f2b/artifacts/cloud-f2b-web-admin-react/artifact-eb34ea94.tar.gz'
        # bucket.get_object_to_file('object_path', 'object_local_path')
        # object_path 填写Object完整路径,完整路径中不包含Bucket名称,例如testfolder/exampleobject.txt。
        # object_local_path 下载的Object在本地存储的文件路径,形如 D:\\localpath\\examplefile.txt。如果指定路径的文件存在会覆盖,不存在则新建。
        try:
            res = bucket.get_object_to_file(oss_object_path, target_file_local_path)
            if res.status != 200:
                print('success:false,download fail, unknow exception, status:%s' % res.status)
        except Exception:
            print('success:false,%s' % traceback.format_exc())
    except Exception:
        print('success:false,%s' % traceback.format_exc())

参考连接:

https://help.aliyun.com/document_detail/88442.html

列举指定前缀的所有文件

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import traceback
if __name__ == '__main__':
    try:
        import oss2
        auth = oss2.Auth('ossAccessKeyId', 'ossAccessKeySecret')
        bucket = oss2.Bucket(auth, 'https://oss-cn-shenzhen.aliyuncs.com', 'exampleBucket')
        result_file_list = []
        for obj in oss2.ObjectIteratorV2(bucket,  prefix='f2b/www/alpha/f2b/icec-cloud-f2b-mobile'):
            result_file_list.append(obj.key)
            print(obj.key)
        print(','.join(result_file_list))
    except Exception:
        print('success:false,%s' % traceback.format_exc())

参考连接:

https://help.aliyun.com/document_detail/88458.html

批量删除OSS对象

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import traceback
if __name__ == '__main__':
    try:
        import oss2
        auth = oss2.Auth('ossAccessKeyId', 'ossAccessKeySecret')
        bucket = oss2.Bucket(auth, 'https://oss-cn-shenzhen.aliyuncs.com', 'exampleBucket')
        oss_object_path_list = ''.join(sys.argv[1:2]).split(',')
        index = 0
        oss_objects_to_delete = oss_object_path_list[index: index+1000] # API限制,每次最多删除1000个文件
        while oss_objects_to_delete:
            result = bucket.batch_delete_objects(oss_object_path_list[index: index+1000])
            # 打印成功删除的文件名。
            print(result.deleted_keys)
            print('批量删除以下OSS对象成功')
            print(''.join(result.deleted_keys))
            index += 1000
            oss_objects_to_delete = oss_object_path_list[index: index+1000]
    except Exception:
        print('success:false,%s' % traceback.format_exc())

参考连接:

https://help.aliyun.com/document_detail/88463.html

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
目录
相关文章
|
2月前
|
数据挖掘 Python
Python示例,展示如何找到最近一次死叉之后尚未形成金叉的位置
【10月更文挑战第7天】金融分析中,“死叉”指短期移动平均线(如MA5)跌破长期移动平均线(如MA10),而“金叉”则相反。本文提供Python代码示例,用于找出最近一次死叉后未形成金叉的位置,涵盖移动平均线计算、交叉点判断及结果输出等步骤,适合金融数据分析。
45 4
|
2天前
|
数据可视化 Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
通过这些思维导图和分析说明表,您可以更直观地理解和选择适合的数据可视化图表类型,帮助更有效地展示和分析数据。
28 8
|
9天前
|
API Python
【Azure Developer】分享一段Python代码调用Graph API创建用户的示例
分享一段Python代码调用Graph API创建用户的示例
31 11
|
13天前
|
网络安全 Python
Python网络编程小示例:生成CIDR表示的IP地址范围
本文介绍了如何使用Python生成CIDR表示的IP地址范围,通过解析CIDR字符串,将其转换为二进制形式,应用子网掩码,最终生成该CIDR块内所有可用的IP地址列表。示例代码利用了Python的`ipaddress`模块,展示了从指定CIDR表达式中提取所有IP地址的过程。
30 6
|
1月前
|
机器学习/深度学习 自然语言处理 API
如何使用阿里云的语音合成服务(TTS)将文本转换为语音?本文详细介绍了从注册账号、获取密钥到编写Python代码调用TTS服务的全过程
如何使用阿里云的语音合成服务(TTS)将文本转换为语音?本文详细介绍了从注册账号、获取密钥到编写Python代码调用TTS服务的全过程。通过简单的代码示例,展示如何将文本转换为自然流畅的语音,适用于有声阅读、智能客服等场景。
138 3
|
1月前
|
数据挖掘 Python
Python示例,展示如何找到最近一次死叉之后尚未形成金叉的位置
金融分析中,“死叉”指短期移动平均线(如MA5)跌破长期移动平均线(如MA10),而“金叉”则相反。本文提供Python代码示例,用于找出最近一次死叉后未形成金叉的位置,涵盖移动平均线计算、交叉点判断及结果输出等步骤,适合金融数据分析。
22 1
|
2月前
|
Linux Android开发 开发者
【Python】GUI:Kivy库环境安装与示例
这篇文章介绍了 Kivy 库的安装与使用示例。Kivy 是一个开源的 Python 库,支持多平台开发,适用于多点触控应用。文章详细说明了 Kivy 的主要特点、环境安装方法,并提供了两个示例:一个简单的 Hello World 应用和一个 BMI 计算器界面。
72 0
|
2月前
|
PyTorch 测试技术 算法框架/工具
Python中Thop库的常见用法和代码示例
肆十二在B站分享了关于THOP(Torch-OpCounter)的实战教学视频。THOP是一个用于计算PyTorch模型操作数和计算量的工具,帮助开发者评估模型复杂度和性能。本文介绍了THOP的安装、使用方法及基本用例,包括如何计算模型的FLOPs和参数量。
130 0
|
2月前
|
Python
Python中tqdm模块的常用方法和示例
`tqdm` 是一个快速、可扩展的Python进度条库,适用于长循环中添加进度提示。通过封装迭代器 `tqdm(iterator)`,可以轻松实现进度显示。支持自定义描述、宽度及嵌套进度条,适用于多种迭代对象。在Jupyter notebook中,可自动调整显示效果。
52 0
|
2月前
|
Python
Python中threading模块的常用方法和示例
Python 的 `threading` 模块提供了多线程编程的能力,允许同时执行多个线程。主要类包括 `Thread`、`Lock` 和 `Condition`。`Thread` 类用于创建和管理线程,`Lock` 用于同步线程,防止资源竞争,`Condition` 用于线程间协调。本文介绍了这些类的常用方法及示例代码,帮助你更好地理解和使用多线程编程。
30 0