文章目录
Django转存图片至阿里云OSS存储,返回图片地址
1. 创建你的AccessKey,并记住Secret
2. 创建你的Bucket列表
3.创建名为oss.py文件
4. 复制以下代码
import uuid
import oss2
# 用户账号密码,第三部说明的Access
# 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
# 获取的AccessKey
from aliyunsdkcore.http.http_response import HttpResponse
from django.views.decorators.csrf import csrf_exempt
auth = oss2.Auth('你的AccessKey', '你的Secret')
# 这个是需要用特定的地址,不同地域的服务器地址不同,不要弄错了
# 参考官网给的地址配置https://www.alibabacloud.com/help/zh/object-storage-service/latest/regions-and-endpoints#concept-zt4-cvy-5db
endpoint = 'http://oss-cn-chengdu.aliyuncs.com'
# 你的项目名称,类似于不同的项目上传的图片前缀url不同
bucket = oss2.Bucket(auth, endpoint, 'mrliuimages') # 项目名称
# 这个是上传图片后阿里云返回的uri需要拼接下面这个url才可以访问,根据自己情况去写这步
base_file_url = 'https://mrliuimages.oss-cn-chengdu.aliyuncs.com/'
# 进度条
# 当无法确定待上传的数据长度时,total_bytes的值为None。
def percentage(consumed_bytes, total_bytes):
if total_bytes:
rate = int(100 * (float(consumed_bytes) / float(total_bytes)))
print('\r{0}% '.format(rate), end='')
def update_fil_file(file):
"""
! 上传单张图片
:param file: b字节文件
:return: 若成功返回图片路径,若不成功返回空
"""
# 生成文件编号,如果文件名重复的话在oss中会覆盖之前的文件
number = uuid.uuid4()
# 生成文件名
base_fil_name = str(number) + '.jpg'
# 生成外网访问的文件路径
file_name = base_file_url + base_fil_name
# 这个是阿里提供的SDK方法 bucket是调用的4.1中配置的变量名
res = bucket.put_object(base_fil_name, file, progress_callback=percentage)
# 如果上传状态是200 代表成功 返回文件外网访问路径
# 下面代码根据自己的需求写
if res.status == 200:
return file_name
else:
return False
5. 需要修改的地方
6. 使用方法
class UploadImageOss(APIView):
permission_classes = []
def post(self, request, *args, **kwargs):
# 获取前端上传的图片,并读取二进制数据
file = request.data.get('file').read()
if not file:
return Response({'code': -1, "msg": "请上传文件"})
# 转存到oss
res = oss.update_fil_file(file)
if res:
response_data = {
"code": 200,
"msg": "转存成功",
"url": res
}
return Response(response_data, status=status.HTTP_200_OK)
else:
return Response({"code": -1, "msg": "存储失败"})
根据你自己的需求写,主要就是获取到图片后读取二进制数据,然后调用oss模块里的pdate_fil_file方法。非常简单。收!