官方地址:
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 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
# -*- 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)