Django接收前端传过来的图片转存至阿里云OSS存储,返回图片地址

Django转存图片至阿里云OSS存储,返回图片地址

1. 创建你的AccessKey,并记住Secret

2. 创建你的Bucket列表

image-20230113160608014

image-20230113160654727

3.创建名为oss.py文件

image-20230113162752049

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. 需要修改的地方

image-20230113161548272

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方法。非常简单。收!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值