目录
默认已知oss配置参数
- 阿里云查询到的 AccessKey ID
- 阿里云 AccessKey secret
- 阿里云 bucket
- 阿里云 endpoint
需要先按照oss2依赖库
pip install oss2
简单上传文件
- import oss2
-
- class AliyunOss(object):
-
- def __init__(self):
- self.access_key_id = "xxxxxxxxxxxxxxxx" # 从阿里云查询到的 AccessKey 的ID
- self.access_key_secret = "xxxxxxxxxxxxxxzxxxxx" # 从阿里云查询到的 AccessKey 的Secret
- self.auth = oss2.Auth(self.access_key_id, self.access_key_secret)
- self.bucket_name = "namexxxxxx" # 阿里云上创建好的Bucket的名称
- self.endpoint = "oss-cn-shanghai.aliyuncs.com" # 阿里云从Bucket中查询到的endpoint
- self.bucket = oss2.Bucket(self.auth, self.endpoint, self.bucket_name)
-
- def put_object_from_file(self, name, file):
- """
-
- :param name: 在阿里云Bucket中要保存的文件名
- :param file: 本地图片的文件名
- :return:
- """
- self.bucket.put_object_from_file(name, file)
- return "https://{}.{}/{}".format(self.bucket_name, self.endpoint, name)
-
-
-
-
-
-
- if __name__ == '__main__':
-
- # 此处第一个参数 img/katong1.png 中的img是阿里云的Bucket中事先创建好的test文件夹,第二个参数/images/katong1.png是本地的图片katong1.png
- img_url = AliyunOss().put_object_from_file("test/katong1.png", "/images/katong1.png")
- print(img_url)
为一个简单的封装,可以支持:
- 上传文件夹下所有文件
- 下载单个文件
- 下载文件夹下所有文件
- import os
- import oss2
-
-
- class HandleOSSUtil(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-shanghai.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: 要上传图片所在的文件夹,例如:/images
- :param oss_dir: oss上的路径,要存在oss上哪个文件夹下面,例如:test/img
- :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.png
- :param save_dir: 要保存在本地的文件目录,例如:/images
- :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: 要存在本地的文件目录,例如:/images
- :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)