阿里云对象存储OSS的使用笔记

官方地址:
https://www.alibabacloud.com/help/zh/oss/developer-reference/manage-directories-3


0 初始化bucket

旧版本OSS

import oss2#endpoint = 'https://oss-cn-shanghai-internal.aliyuncs.com' #  Suppose that your bucket is in the Hangzhou region.
endpoint = 'oss-cn-shanghai.aliyuncs.com' 
endpoint = 'oss-cn-shanghai-internal.aliyuncs.com' #  Suppose that your bucket is in the Hangzhou region.auth = oss2.Auth('Accesskey ID', ' Aceesskey Screct')
bucket = oss2.Bucket(auth, endpoint, 'Bucket Name')

其中有几个要素

  • Bucket Name:你自己后台创建OSS时候的BUCKET名字
  • 内网Endpoint:oss-cn-shanghai-internal.aliyuncs.com,留意内外网
  • 外网Endpoint: oss-cn-shanghai.aliyuncs.com
  • Accesskey ID:账号的ID
  • Aceesskey Screct:账号的Screct

新版本V4:

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider# 从环境变量中获取访问凭证。运行本代码示例之前,请先配置环境变量。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
endpoint = 'yourEndpoint'
# 填写Endpoint对应的Region信息,例如cn-hangzhou。
region = 'cn-hangzhou'# 填写Bucket名称。
bucket = oss2.Bucket(auth, endpoint, 'examplebucket', region=region) 

其中EnvironmentVariableCredentialsProvider这里需要在Linux环境先进行配置(Python配置访问凭证)
还可以直接代码配置,但是阿里云文档提示并不推荐,是因为容易泄露账号与密码:

# -*- coding: utf-8 -*-
import oss2# 填写从STS服务获取的临时访问密钥(AccessKey ID和AccessKey Secret)。
sts_access_key_id = 'OSS_ACCESS_KEY_ID'
sts_access_key_secret = 'OSS_ACCESS_KEY_SECRET'
# 填写从STS服务获取的安全令牌(SecurityToken)。
security_token = 'OSS_SESSION_TOKEN'
# 使用临时访问凭证中的认证信息初始化StsAuth实例。
auth = oss2.StsAuth(sts_access_key_id,sts_access_key_secret,security_token)

1 上传文件

来自:https://www.alibabacloud.com/help/zh/oss/developer-reference/simple-upload-1?spm=a2c63.p38356.0.0.5706672arYIdvz

# -*- coding: utf-8 -*-
import oss2
import os
from oss2.credentials import EnvironmentVariableCredentialsProvider# 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
# 填写Bucket名称。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')# 必须以二进制的方式打开文件。
# 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。
with open('D:\\localpath\\examplefile.txt', 'rb') as fileobj:# Seek方法用于指定从第1000个字节位置开始读写。上传时会从您指定的第1000个字节位置开始上传,直到文件结束。fileobj.seek(1000, os.SEEK_SET)# Tell方法用于返回当前位置。current = fileobj.tell()# 填写Object完整路径。Object完整路径中不能包含Bucket名称。bucket.put_object('exampleobject.txt', fileobj)

Python SDK还提供了更便捷的方法用于上传本地文件。

# 填写Object完整路径和本地文件的完整路径。Object完整路径中不能包含Bucket名称。
# 如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。
bucket.put_object_from_file('exampleobject.txt', 'D:\\localpath\\examplefile.txt')

2 下载文件

来自:https://www.alibabacloud.com/help/zh/oss/developer-reference/download-objects-as-files-1?spm=a2c63.p38356.0.0.56c043feCNOUvO

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider# 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# Endpoint以杭州为例,其它Region请按实际情况填写。
# 填写Bucket名称,例如examplebucket。
bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')# 填写Object完整路径,完整路径中不包含Bucket名称,例如testfolder/exampleobject.txt。
# 下载Object到本地文件,并保存到指定的本地路径D:\\localpath\\examplefile.txt。如果指定的本地文件存在会覆盖,不存在则新建。
bucket.get_object_to_file('testfolder/exampleobject.txt', 'D:\\localpath\\examplefile.txt')        

3 创建、删除文件

3.1 创建目录

来自:
https://www.alibabacloud.com/help/zh/oss/developer-reference/manage-directories-3

import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider# 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
# 填写Bucket名称。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')# 填写目录名称,目录需以正斜线结尾。
bucket.put_object('exampledir/', '')    

3.2 删除目录

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider# 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
# 填写Bucket名称。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')
prefix = "exampledir/"# 删除目录及目录下的所有文件。
for obj in oss2.ObjectIterator(bucket, prefix=prefix):bucket.delete_object(obj.key)

4 其他

4.1 Python判断文件是否存在

来自:https://www.alibabacloud.com/help/zh/oss/developer-reference/determine-whether-an-object-exists?spm=a2c63.p38356.0.0.294e64c9VUUhz0

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
# yourBucketName填写存储空间名称。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'yourBucketName')# 填写Object的完整路径,Object完整路径中不能包含Bucket名称。
exist = bucket.object_exists('exampleobject.txt')
# 返回值为true表示文件存在,false表示文件不存在。
if exist:print('object exist')
else:print('object not exist')

4.2 遍历所有文件

来自:https://www.alibabacloud.com/help/zh/oss/developer-reference/list-objects-2?spm=a2c63.p38356.0.0.72bc1e69Xlnd88

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from itertools import islice# 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
# 填写Bucket名称,例如examplebucket。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')
# 列举Bucket下的10个文件。
for b in islice(oss2.ObjectIterator(bucket), 10):print(b.key)

4.3 查询指定前缀的文件

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
# 填写Bucket名称,例如examplebucket。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')# 列举fun文件夹下的所有文件,包括子目录下的文件。
for obj in oss2.ObjectIterator(bucket, prefix='fun/'):print(obj.key)

4.4 列举指定目录下的文件和子目录

来自:https://www.alibabacloud.com/help/zh/oss/developer-reference/list-objects-2?spm=a2c63.p38356.0.0.72bc1e69Xlnd88

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
# 填写Bucket名称,例如examplebucket。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')# 列举fun文件夹下的文件与子文件夹名称,不列举子文件夹下的文件。
for obj in oss2.ObjectIterator(bucket, prefix = 'fun/', delimiter = '/'):# 通过is_prefix方法判断obj是否为文件夹。if obj.is_prefix():  # 判断obj为文件夹。print('directory: ' + obj.key)else:                # 判断obj为文件。print('file: ' + obj.key)

4.5 获取指定目录下的文件大小

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProviderdef CalculateFolderLength(bucket, folder):length = 0for obj in oss2.ObjectIterator(bucket, prefix=folder):length += obj.sizereturn length
# 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
# 填写Bucket名称,例如examplebucket。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')for obj in oss2.ObjectIterator(bucket, delimiter='/'):if obj.is_prefix():  # 判断obj为文件夹。length = CalculateFolderLength(bucket, obj.key)print('directory: ' + obj.key + '  length:' + str(length) + "Byte.")else: # 判断obj为文件。print('file:' + obj.key + '  length:' + str(obj.size) + "Byte.")

4.6 删除单个文件

https://www.alibabacloud.com/help/zh/oss/developer-reference/delete-objects-2?spm=a2c63.p38356.0.0.2f445ebaD6QQyr

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider# 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
# 填写Bucket名称,例如examplebucket。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')# 删除文件。
# yourObjectName填写待删除文件的完整路径,完整路径中不包含Bucket名称,例如exampledir/exampleobject.txt。
# 如需删除文件夹,请将yourObjectName设置为对应的文件夹名称。如果文件夹非空,则需要将文件夹下的所有文件删除后才能删除该文件夹。
bucket.delete_object('exampledir/exampleobject.txt')            

4.7 批量删除文件

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider# 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
# 填写Bucket名称,例如examplebucket。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')# 批量删除3个文件。每次最多删除1000个文件。
# 依次填写待删除的3个文件的完整路径,完整路径中不包含Bucket名称。
result = bucket.batch_delete_objects(['exampleobject1.jpg', 'testobject2.png', 'destobject3.txt'])
# 打印成功删除的文件名。
print('\n'.join(result.deleted_keys))            

4.8 删除指定前缀或目录下的多个文件

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
# 填写Bucket名称,例如examplebucket。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')
# 如果您需要删除所有前缀为src的文件,则prefix设置为src。设置为src后,所有前缀为src的非目录文件、src目录以及目录下的所有文件均会被删除。
prefix = 'src'
# 如果您仅需要删除src目录及目录下的所有文件,则prefix设置为src/。
# prefix = 'src/'# 删除多个文件。
for obj in oss2.ObjectIterator(bucket, prefix=prefix):bucket.delete_object(obj.key)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/796322.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络 实验指导 实验12

路由信息协议(RIP)实验 1.实验拓扑图 名称接口IP地址网关Switch AF0/1192.168.1.1/24F0/2172.1.1.1/24Switch BF0/1192.168.1.2/24F0/2172.2.2.1/24PC1172.1.1.2/24172.1.1.1PC2172.1.1.3/24172.1.1.1PC3172.2.2.2/24172.2.2.1PC4172.2.2.3/24172.2.2.1…

分布式深度学习库BigDL简述

BigDL简述 BigDL是一个在Apache Spark上构建的分布式深度学习库,由英特尔开发并开源。它允许用户使用Scala或Python语言在大规模数据集上进行深度学习模型的训练和推理。BigDL提供了许多常见的深度学习模型和算法的实现,包括卷积神经网络(CNN)、循环神经网络(RNN)等。由于…

Linux——进程管理

1.gcc与g区别(补充了解) 比如有两个文件:main.c,mainc.cpp(分别用C语言和C语言写的)如果要用gcc编译呢? gcc -o mainc main.c gcc -o mainc mainc.cpp -lstdc 指明用c的标准库; 区别一: gcc默认只链接C库,并不会链接C的库;g会默认链接c标准库. 区别二: gcc编译.c文件,则按照C语…

网易雷火 暑期实习提前批一面(48min)

做题(20min) 问答:(28min) 熟悉哪些排序(快排、归并) C中的map和unordered_map的区别,哪个内存占用更大 C多态 struct会触发GC吗?class呢? MVC设计模式…

NLP 在搜索引擎优化上做的工作

自然语言处理(NLP)在搜索引擎优化上的工作主要集中在提升搜索结果的相关性和准确性,以及改善用户的搜索体验。以下是NLP在搜索引擎优化中所做工作的详细介绍: 1. 理解用户查询意图【4】 NLP技术可以帮助搜索引擎更好地理解用户的…

设计模式:生活中的观察者模式

想象你在社交媒体上关注(订阅)了一个名人或新闻频道(主题)。一旦他们发布新内容,所有关注者(观察者)都会收到通知。这个过程就很像观察者模式的工作原理。 生活场景类比 主题(Subj…

Unity和Android的交互

Unity和Android的交互 一、前言二、Android导出jar/aar包到Unity2.1 版本说明2.2 拷贝Unity的classes.jar给Android工程2.2.1 classes.jar的位置2.2.2 Android Studio创建module2.2.3 拷贝classes.jar 到 Android工程并启用 2.3 编写Android工程代码2.3.1 创建 MainActivity2.…

开源 _ 新一代Android 性能监控框架Rabbit

最终扫描结果会展示如下: 点击右上角导出按钮可以把扫描结果以json的形式导出到SD卡中。 网络日志监控 rabbit可以记录网络请求日志并方便的查看返回的json数据: 卡顿日志监控 rabbit通过Choreographer来检测主线程的运行情况,并异步采集主线程堆栈来还原卡顿现场。 对于下…

自动驾驶汽车关键技术_感知

自动驾驶汽车关键技术|感知 附赠自动驾驶学习资料和量产经验:链接 两套标准 分别由美国交通部下属的国家高速路安全管理局(NationalHighwayTraffic Safety Administration ,NHSTA) 和国际汽车工程师协会(Societyof Automotive Engineers&am…

C++进阶--C++11(2)

C11第一篇 C11是C编程语言的一个版本,于2011年发布。C11引入了许多新特性,为C语言提供了更强大和更现代化的编程能力。 可变参数模板 在C11中,可变参数模板可以定义接受任意数量和类型参数的函数模板或类模板。它可以表示0到任意个数&…

golang 结构体比较

1.如果结构体成员包含 map, slice, 不可比较 2.int string 普通类型,如果变量顺序不一样,则不可比较 package mainimport "fmt"func main() {s1 : struct {//a map[int]int// a []inta stringb int}{}s2 : struct {//a map[int]int// a []int…

Python+Django+Html河道垃圾识别网页系统

程序示例精选 PythonDjangoHtml河道垃圾识别网页系统 如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助! 前言 这篇博客针对《PythonDjangoHtml河道垃圾识别网页系统》编写代码,代码整洁,规…

LeetCode 378 有序矩阵中第K小的元素

题目信息 LeetoCode地址: . - 力扣(LeetCode) 题解内容大量转载于:. - 力扣(LeetCode) 题目理解 题意很直观,就是求二维矩阵中所有元素排序后第k小的数。 最小堆写法 该写法不再赘述,维护…

前端canvas项目实战——在线图文编辑器(八):复制、删除、锁定、层叠顺序

目录 前言一、效果展示二、实现步骤1. 复制2. 删除3. 锁定4. 层叠顺序 三、实现过程中发现的bug1. clone方法不复制自定义属性2. 复制「锁定」状态的对象,得到的新对象也是「锁定」状态 四、Show u the code后记 前言 上一篇博文中,我们细致的讲解了实现…

面试经验|PlayStation全球交互娱乐组——技术经理面

文章目录 题记自我介绍图形学AI技术问题项目细节3D资产有哪些表示形式在结合神经网络的时候,3D数据都如何表示目前观察到比较成功的AIgraphics领域的成功落地案例目前在生成式AI(GenAI)上的一个趋势目前想到未来可以落地的技术 C基础用8 bit的…

开发语言漫谈-Java

由于C过于复杂,Java诞生了。与C相比,Java更易于学习和使用,它去掉C中的指针和解决了内存管理问题。Java提供了垃圾自动回收机制,自动管理不再使用的内存。Python又进一步简化,使得语法更简洁,更易于阅读和编…

Oracle 使用维进行查询重写

Oracle 使用维进行查询重写 conn / as sysdba alter user sh account unlock identified by sh; conn sh/sh query_rewrite_integrity TRUSTED --物化视图的定义 select query from user_mviews where MVIEW_NAMECAL_MONTH_SALES_MV;CREATE MATERIALIZED VIEW cal_month_s…

【算法】统计素数个数 - 埃筛法

题目 传入一个数字,统计小于这个数字的素数个数。 原理 素数只能被1和它本身整除,所以小的数能够通过乘法计算出来的数都不是素数。埃筛法就是不断地用小的数做乘法标记出哪些数不是素数,从而减少遍历次数。 代码 public static void mai…

SpringBoot3整合RabbitMQ之一_消息生产者与消息消费者服务搭建

SpringBoot3整合RabbitMQ之一_消息生产者与消息消费者服务搭建 文章目录 SpringBoot3整合RabbitMQ之一_消息生产者与消息消费者服务搭建1. 消费发布者服务1. 新建工程2. pom.xml3. application.yml4. 主启动类 2. 消息消费者服务1. 新建工程2. pom.xml3. application.yml4. 主启…

VPDN(L2TP、PPTP)

1、虚拟专用拨号网络 远程接入VPN,客户端可以是PC机 技术:L2TP、PPTP 术语:LAC:L2TP的访问集中器 --- 提供用户的接入 LNS:L2TP的网络服务器 --- 提供L2TP服务的服务器 2、技术 1)PPTP 点对点隧道…