OSS 上传和删除图片 Python SDK

最近在搞一些全栈的小项目, 涉及到图片的上传, 删改等操作, 想着还是用这个云服务器来整一波, 阿里云的 OSS对象存储, 40G 1年9块钱, 值得拥有!

前提

  • 购买了阿里云 OSS 服务
  • 创建了 Access Key 和 Access Key Secret
  • 创建了一个 Bucket , 虽然也可以用代码, 但没有必要
  • 安装了 Python3.8+ 环境, 和 pip install oss3

实测演示

from oss2 import Auth, Bucket, ObjectIterator
 
# 设置Access Key ID和Access Key Secret
access_key_id = 'LTAI5tLxxxxx'
access_key_secret = 'Pk80TXXYEDTaQxxxxxxx'

# OSS服务地址, buket 的名称 (手工建的), 存储空间名称
endpoint = 'https://oss-cn-shenzhen.aliyuncs.com' 
bucket_name = 'yy' 

auth = Auth(access_key_id, access_key_secret)
bucket = Bucket(auth, endpoint, bucket_name)

bucket_path = 'https://' + bucket_name + '.'  + endpoint.split('//')[-1]



def put_image(local_file, file_name):
    # local_file 是要上传文件的完整路径
    # file_name 默认在 buket 下:  a.png 表示 yy/a.png;  
    # a/b.png 表示 yy/a/b.png, 不存在则新建, 存在则追加
    try:
        with open(local_file, 'rb') as fp:
            result = bucket.put_object(file_name, fp)
            if result.status == 200:
                # https://yy.oss-cn-shenzhen.aliyuncs.com/test/cj2.png
                image_url = bucket_path + '/' +  file_name
                print('上传成功!, 此图片链接为: ', image_url)
    except Exception as err:
        print(err)


def del_image(file_full_path):
    file_name = file_full_path.split("com/")[-1]
    bucket.delete_object(file_name)
    
    exist = bucket.object_exists(file_name)
    if not exist:
        print(file_name, ' 删除成功!')

        
if __name__ == '__main__':
    
    # 上传测试
    # put_image('./cjj.png', 'yg.png')
    
    # 删除
    del_image('https://yy.oss-cn-shenzhen.aliyuncs.com/test/cj3.png')
    

小结

  • 上传 API: put_object(file_name, fp)
  • 删除API: delete_object(file_name)
  • 存在API: object_exists(file_name)
posted @ 2024-01-16 21:34  致于数据科学家的小陈  阅读(18)  评论(0编辑  收藏  举报