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

实践环境

运行环境:

Python 3.5.4

CentOS Linux release 7.4.1708 (Core)/Win10

需要安装以下类库:

pip3 install setuptools_rust1.1.2

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

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

pip3 install oss22.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

Python 阿里云OSS文件上传下载与文件删除及检索示例的更多相关文章

  1. Thinkphp整合阿里云OSS图片上传实例

    Thinkphp3.2整合阿里云OSS图片上传实例,图片上传至OSS可减少服务器压力,节省宽带,安全又稳定,阿里云OSS对于做负载均衡非常方便,不用传到各个服务器了 首先引入阿里云OSS类库 < ...

  2. SpringMVC文件上传下载(单文件、多文件)

    前言 大家好,我是bigsai,今天我们学习Springmvc的文件上传下载. 文件上传和下载是互联网web应用非常重要的组成部分,它是信息交互传输的重要渠道之一.你可能经常在网页上传下载文件,你可能 ...

  3. Spring Boot2(十四):单文件上传/下载,文件批量上传

    文件上传和下载在项目中经常用到,这里主要学习SpringBoot完成单个文件上传/下载,批量文件上传的场景应用.结合mysql数据库.jpa数据层操作.thymeleaf页面模板. 一.准备 添加ma ...

  4. 阿里云OSS简单上传本地文件

    上传本地文件 # -*- coding: utf-8 -*- import oss2 # 阿里云主账号AccessKey拥有所有API的访问权限,风险很高.强烈建议您创建并使用RAM账号进行API访问 ...

  5. ThinkPHP5使用阿里云OSS图片上传

    1.下载OSS文件放在网站根目录下(OSS文件下载地址:https://gitee.com/jth1234/oss_files.git) 2.在入口文件中加载OSS 3.config文件配置oss信息 ...

  6. 阿里云OSS图片上传类

    1.阿里云基本函数 /** * 把本地变量的内容到文件 * 简单上传,上传指定变量的内存值作为object的内容 */ public function putObject($imgPath,$obje ...

  7. 阿里云oss视频上传不能在线播放,js,javascript,在线播放器,插件

    网页视频播放插件 发现阿里云oss储存,上传了视频不能在线播放. 解决方法:使用插件播放即可解决. <html> <head> <meta charset="u ...

  8. 再见Xshell、Xftp!Python执行Linux命令、上传下载远程文件

    相信大家应该都接触过Linux操作系统(Ubuntu.Centos等),那么在使用的Linux操作系统需要使用一些远程ssh工具,尤其是公网服务器. 常用的ssh工具主要有:Xshell.MobaXt ...

  9. file does not exist 阿里云OSS图片上传遇到的问题

    ./uploads\20171209/0497b8dd16e72c6fcf5bfd552f535a81.png file does not exist 原代码 function aliyun($sav ...

  10. 阿里云oss如何上传一个文件夹

    最近公司在做工程项目,实现文件夹云存储上传 网上找了很久,发现很多项目都存在一些问题,但还是让我找到了一个成熟的项目. 工程: 对项目的文件夹云存储上传功能做出分析,找出文件夹上传的原理,对文件夹的云 ...

随机推荐

  1. 为datagridview添加自定义按钮

    先上图: 我是直接网上搜得代码,不是本人写得.下面说说大体思路,继承DataGridViewButtonCell类实现自定义类比如这个:DataGridViewDetailButtonCell 里面, ...

  2. MySQL学习笔记-存储引擎

    存储引擎 一. MySQL体系结构 MySQL Server 连接层:连接的处理.认证授权.安全方案.检查是否超过最大连接数等. 服务层:SQL接口.解析器.查询优化器.缓存 引擎层:引擎是数据存储和 ...

  3. QEMU EDU设备模拟PCI设备驱动编写

    环境安装 buildroot编译 buildroot下载,编译: 下载地址:Index of /downloads (buildroot.org) 下载版本:https://www.buildroot ...

  4. jquery checkbox的全选和反选

    <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8 ...

  5. C#.NET 微信上传电子小票

    HttpWebRequest 时,不认图片的Content-Type.Content-Type 实际是有传的. 报错内容:{"code":"PARAM_ERROR&quo ...

  6. Sass报错: Using / for division is deprecated

         原因是:当sass版本>= 1.33.0时,会不支持 / 这种语法:  解决方式一:      降低sass版本,将sass版本换成:"sass": "^ ...

  7. 面试官:为什么重写equals方法必须要重新hashCode方法?

    网络上解释的很全面但是很枯涩,也有些难懂,其实就是为了保证当该对象作为key时哈希表的检索效率.如HashMap的get方法是分两步获取的 第一步通过key的哈希值找到对应的哈希桶 第二步通过equa ...

  8. vue2 实现可拖拽悬浮球

    实现效果 相关代码 点击查看代码 <template> <div class="float-box"> <div class="button ...

  9. substr()函数用法

    substr()函数: 定义和用法: substr()返回字符串的一部分 如果start参数是负数且length小于等于start,则length为0 语法: substr(starting,star ...

  10. 华为交换机配置端口模式时报错:Please renew the default configurations

    场景 在华为交换机上使用混杂端口时报这个错,原因是你之前已经将此端口加入了某个vlan 所以你需要undo之前配置的命令 解决方法 sys int G 0/0/1 #替换为报错的端口 undo por ...