• 【Python】3.python实现图片上传到阿里云OSS


    目录

    序言

    1.安装 oss2 依赖库

    2.Python代码

    2.1 示例1 

    2.2 示例2 


     

    序言

    默认已知oss配置参数

    1. 阿里云查询到的 AccessKey ID
    2. 阿里云 AccessKey secret
    3. 阿里云 bucket
    4. 阿里云 endpoint

    1.安装 oss2 依赖库

    需要先按照oss2依赖库

    pip install oss2
    

    2.Python代码

    2.1 示例1 

    简单上传文件

    1. import oss2
    2. class AliyunOss(object):
    3. def __init__(self):
    4. self.access_key_id = "xxxxxxxxxxxxxxxx" # 从阿里云查询到的 AccessKey 的ID
    5. self.access_key_secret = "xxxxxxxxxxxxxxzxxxxx" # 从阿里云查询到的 AccessKey 的Secret
    6. self.auth = oss2.Auth(self.access_key_id, self.access_key_secret)
    7. self.bucket_name = "namexxxxxx" # 阿里云上创建好的Bucket的名称
    8. self.endpoint = "oss-cn-shanghai.aliyuncs.com" # 阿里云从Bucket中查询到的endpoint
    9. self.bucket = oss2.Bucket(self.auth, self.endpoint, self.bucket_name)
    10. def put_object_from_file(self, name, file):
    11. """
    12. :param name: 在阿里云Bucket中要保存的文件名
    13. :param file: 本地图片的文件名
    14. :return:
    15. """
    16. self.bucket.put_object_from_file(name, file)
    17. return "https://{}.{}/{}".format(self.bucket_name, self.endpoint, name)
    18. if __name__ == '__main__':
    19. # 此处第一个参数 img/katong1.png 中的img是阿里云的Bucket中事先创建好的test文件夹,第二个参数/images/katong1.png是本地的图片katong1.png
    20. img_url = AliyunOss().put_object_from_file("test/katong1.png", "/images/katong1.png")
    21. print(img_url)

    2.2 示例2 

    为一个简单的封装,可以支持:

    • 上传文件夹下所有文件
    • 下载单个文件
    • 下载文件夹下所有文件

    1. import os
    2. import oss2
    3. class HandleOSSUtil(object):
    4. def __init__(self, key_id, key_secret, bucket=None):
    5. '''
    6. :param key_id:
    7. :param key_secret:
    8. :param bucket: bucket名字,例如:test
    9. '''
    10. self.auth = oss2.Auth(key_id, key_secret)
    11. self.link_url = 'https://oss-cn-shanghai.aliyuncs.com'
    12. if bucket:
    13. self.bucket = oss2.Bucket(self.auth, self.link_url, bucket)
    14. # 将一个文件夹下面的所有文件都上传
    15. def update_file(self, file_dir, oss_dir):
    16. '''
    17. :param file_dir: 要上传图片所在的文件夹,例如:/images
    18. :param oss_dir: oss上的路径,要存在oss上哪个文件夹下面,例如:test/img
    19. :return:
    20. '''
    21. for i in os.listdir(file_dir):
    22. # oss上传后的路径
    23. oss_path = f'{oss_dir}/{i}'
    24. # 本地文件路径
    25. file_path = f'{file_dir}/{i}'
    26. # 进行上传
    27. self.bucket.put_object_from_file(oss_path, file_path)
    28. # 下载单个文件
    29. def download_one_file(self, oss_path, save_dir):
    30. '''
    31. :param oss_path: 文件所在的oss地址,例如:test/test.png
    32. :param save_dir: 要保存在本地的文件目录,例如:/images
    33. :return:
    34. '''
    35. file_name = oss_path.split('/')[-1]
    36. save_path = os.path.join(save_dir, file_name)
    37. result = self.bucket.get_object_to_file(oss_path, save_path)
    38. if result.status == 200:
    39. return 1
    40. # 下载文件夹中所有文件
    41. def download_many_file(self, oss_dir, save_dir):
    42. '''
    43. :param oss_dir: oss上要下载的文件目录,例如:test/test_result/
    44. :param save_dir: 要存在本地的文件目录,例如:/images
    45. :return:
    46. '''
    47. obj = oss2.ObjectIterator(self.bucket, prefix=oss_dir)
    48. # 遍历oss文件夹获取所有的对象列表,i.key是文件的完整路径
    49. for i in obj:
    50. # 如果文件是以斜杠结尾的,说明不是文件,则跳过
    51. if i.key.endswith('/'):
    52. continue
    53. # 文件名:文件路径按照斜杠分割取最后一个
    54. file_name = i.key.split('/')[-1]
    55. # 下载到的具体路径
    56. save_path = os.path.join(save_dir, file_name)
    57. # 从oss下载
    58. self.bucket.get_object_to_file(i.key, save_path)

  • 相关阅读:
    Tokenview X-ray功能:深入探索EVM系列浏览器的全新视角
    (一). 贝叶斯滤波器
    Android学习笔记 45. SQLite
    【C++学习笔记】引用
    python学习笔记12:小数类型的角度到度分秒的转换
    【前端源码解析】mustache 模板引擎核心原理
    重磅联合!飞桨携手Apollo共建Paddle3D自动驾驶感知能力
    力扣每日一题2022-09-05中等题:寻找重复的子树
    缓存预热Springboot定时任务
    文献阅读4
  • 原文地址:https://blog.csdn.net/weixin_36755535/article/details/128039804