import os
import oss2
class HandleOSS(object):
def __init__(self, key_id, key_secret, bucket=None):
'''
:param key_id:
:param key_secret:
:param bucket: bucket名字,例如:test
'''
self.auth = oss2.Auth(key_id, key_secret)
self.link_url = 'https://oss-cn-hangzhou.aliyuncs.com'
if bucket:
self.bucket = oss2.Bucket(self.auth, self.link_url, bucket)
# 将一个文件夹下面的所有文件都上传
def update_file(self, file_dir, oss_dir):
'''
:param file_dir: 要上传图片所在的文件夹,例如:/Users/guojun/Desktop/pic
:param oss_dir: oss上的路径,要存在oss上哪个文件夹下面,例如:test/1212
:return:
'''
for i in os.listdir(file_dir):
# oss上传后的路径
oss_path = f'{oss_dir}/{i}'
# 本地文件路径
file_path = f'{file_dir}/{i}'
# 进行上传
self.bucket.put_object_from_file(oss_path, file_path)
# 下载单个文件
def download_one_file(self, oss_path, save_dir):
'''
:param oss_path: 文件所在的oss地址,例如:test/test.text
:param save_dir: 要保存在本地的文件目录,例如:/Users/guojun/Desktop/pic
:return:
'''
file_name = oss_path.split('/')[-1]
save_path = os.path.join(save_dir, file_name)
result = self.bucket.get_object_to_file(oss_path, save_path)
if result.status == 200:
return 1
# 下载文件夹中所有文件
def download_many_file(self, oss_dir, save_dir):
'''
:param oss_dir: oss上要下载的文件目录,例如:test/test_result/
:param save_dir: 要存在本地的文件目录,例如:/Users/guojun/Desktop/pic
:return:
'''
obj = oss2.ObjectIterator(self.bucket, prefix=oss_dir)
# 遍历oss文件夹获取所有的对象列表,i.key是文件的完整路径
for i in obj:
# 如果文件是以斜杠结尾的,说明不是文件,则跳过
if i.key.endswith('/'):
continue
# 文件名:文件路径按照斜杠分割取最后一个
file_name = i.key.split('/')[-1]
# 下载到的具体路径
save_path = os.path.join(save_dir, file_name)
# 从oss下载
self.bucket.get_object_to_file(i.key, save_path)
Python上传整个文件夹的文件到OSS、从OSS某个文件夹下下载所有的文件到本地
最新推荐文章于 2023-08-28 16:04:48 发布