前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >阿里云对象存储OSS的使用笔记

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

作者头像
悟乙己
发布2024-05-24 18:15:24
910
发布2024-05-24 18:15:24
举报
文章被收录于专栏:素质云笔记素质云笔记

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


0 初始化bucket

旧版本OSS

代码语言:javascript
复制
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:

代码语言:javascript
复制
# -*- 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配置访问凭证) 还可以直接代码配置,但是阿里云文档提示并不推荐,是因为容易泄露账号与密码:

代码语言:javascript
复制
# -*- 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

代码语言:javascript
复制
# -*- 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还提供了更便捷的方法用于上传本地文件。

代码语言:javascript
复制
# 填写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

代码语言:javascript
复制
# -*- 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

代码语言:javascript
复制
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 删除目录

代码语言:javascript
复制
# -*- 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

代码语言:javascript
复制
# -*- 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

代码语言:javascript
复制
# -*- 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 查询指定前缀的文件

代码语言:javascript
复制
# -*- 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

代码语言:javascript
复制
# -*- 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 获取指定目录下的文件大小

代码语言:javascript
复制
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

def CalculateFolderLength(bucket, folder):
    length = 0
    for obj in oss2.ObjectIterator(bucket, prefix=folder):
        length += obj.size
    return 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

代码语言:javascript
复制
# -*- 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 批量删除文件

代码语言:javascript
复制
# -*- 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 删除指定前缀或目录下的多个文件

代码语言:javascript
复制
# -*- 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)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-04-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0 初始化bucket
  • 1 上传文件
  • 2 下载文件
  • 3 创建、删除文件
    • 3.1 创建目录
      • 3.2 删除目录
      • 4 其他
        • 4.1 Python判断文件是否存在
          • 4.2 遍历所有文件
            • 4.3 查询指定前缀的文件
              • 4.4 列举指定目录下的文件和子目录
                • 4.5 获取指定目录下的文件大小
                  • 4.6 删除单个文件
                    • 4.7 批量删除文件
                      • 4.8 删除指定前缀或目录下的多个文件
                      相关产品与服务
                      对象存储
                      对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档