• 【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|golang】2352. 相等行列对
    电脑怎么录音,亲身测评,让你事半功倍!
    激光切割技术已经成功融入传统手工制鞋业的生产过程
    spark源码的scala解析
    【Android入门】7、多媒体:用 NotificationChannel 和 NotificationManager 实现系统通知、播放音频和视频
    《低代码指南》——维格云小程序开发简介
    睿趣科技:抖音店铺名字怎么更吸引人
    代码质量管理平台之SonarQube
    【校招VIP】“推电影”第一期电影详情模块前端代码作业评审
    【SpringMVC】springmvc中的数据校验
  • 原文地址:https://blog.csdn.net/weixin_36755535/article/details/128039804