• 【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)

  • 相关阅读:
    Java中的设计模式在代码重构中的应用
    Android 13.0 Launcher3 app图标长按去掉应用信息按钮
    python利用joblib进行并行数据处理
    正点原子嵌入式linux驱动开发——U-boot移植
    Vue生产环境调试的方法
    Python百日进阶-WEB开发】Day152 - 前端基础 之 JQuery(一)
    大模型引领未来:探索其在多个领域的深度应用与无限可能【第二章、金融领域:大模型重塑金融生态】
    R语言画图/绘图/作图2
    10月8日 Jdbc(1)
    【MySQL】错误1166 Incorrect column name
  • 原文地址:https://blog.csdn.net/weixin_36755535/article/details/128039804