• 阿里云对象存储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')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    其中有几个要素

    • 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) 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    其中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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

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

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

    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')        
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    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/', '')    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    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')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

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

    # -*- 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.")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    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')            
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    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))            
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    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)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
  • 相关阅读:
    服务熔断&服务降级
    java基础
    安装Hadoop,启动hadoop(每次都用),设置免密码登陆
    MATLAB基本语法
    【STL】string各种函数的应用
    2530. 执行 K 次操作后的最大分数
    十九,镜面IBL--BRDF积分贴图
    追寻上古文明毕业季研学营
    flutter系列之:flutter中常用的GridView layout详解
    nginx的优化和防盗链
  • 原文地址:https://blog.csdn.net/sinat_26917383/article/details/137440069