最近在搞一些全栈的小项目, 涉及到图片的上传, 删改等操作, 想着还是用这个云服务器来整一波, 阿里云的 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)