VUE 使用el-upload上传图片到Django

本文介绍了如何使用Element-UI的el-upload组件在前端上传图片,并在后端通过Django接收并保存图片。后端通过APIView接收POST请求,将图片保存到静态文件夹,并返回保存路径。前端在文件上传成功后,根据返回的路径更新图片路径,展示图片。
摘要由CSDN通过智能技术生成

这里我们主要是借助element-ui中的el-upload来上传图片的

下面是前端的代码

<el-form-item label="logo图片" prop="logo">

          <el-upload

            :action="host + '/brand/logo/'"

            :auto-upload="true"

            :on-success="uploadSuccess"

          >

            <el-button size="small" type="primary">点击选择图片</el-button>

          </el-upload>

        </el-form-item>

这里用到了里面的三个参数//具体可以参考官方文档组件 | Element

action:上传的地址    会向该地址发送一个post请求

auto-upload:是否在选取文件后立即进行上传   是一个布尔值  true/false

on-success:文件上传成功时的钩子

 图片在上传后

后端要进行一些处理

定义一个视图 接收post请求

获取前端传来的文件对象  使用    file = request.data.get("file")

        # file.file  上传文件的字节流
        # file.name  上传文件的名字
 

下面用到了一个静态文件 用来存储上传的图片

可以参考下面这篇文章

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/kun_ers/article/details/124326953
————————————————
版权声明:本文为CSDN博主「kun_ser」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/kun_ers/article/details/124326953

from rest_framework.views import APIView
from django.conf import settings
import os


class UploadLogoView(APIView):
    def post(self, request):
        # 获取文件对象
        file = request.data.get("file")
        # file.file  上传文件的字节流
        # file.name  上传文件的名字

        # 拼接路径
        # static_path : 该路径前后不能有斜杠  对拼接有影响
        static_path = "static/images/logos"
        # 将静态资源文件夹拼接到项目根目录
        file_path = os.path.join(settings.BASE_DIR, static_path)
        # 拼接图片名称
        file_name = os.path.join(file_path, file.name)
    
        # 保存图片
        # wb  以二进制形式写入
        with open(file_name, "wb") as f:
            # 写入字节流
            f.write(file.file.read())

        # 返回响应
        data = {
            "code": 200,
            'msg': "上传图片成功",
            'static_path': static_path,
        }
        return Response(data)

wb  : w是写入     b 是二进制   read()  读取

返回的响应中需要有静态文件夹的一个  接口 

        # static_path : 该路径前后不能有斜杠  对拼接有影响
        static_path = "static/images/logos"

 然后回到前端

在methods中定义一个uploadSuccess方法

对这个静态文件的路径进行拼接处理  赋值给 logo,在发送添加或者修改的请求时 ,将数据发送到服务器,并保存到数据库

files.name:  文件名

    uploadSuccess(res, files) {

      this.BrandsForm.logo = "/" + res.static_path + "/" + files.name;

    },

 最后如果想要展示图片的话可以使用img标签,绑定一下路径

例如:

<img :src="host + BrandsForm.logo" width="102" />

# host是服务器的地址

# BrandsForm.logo是从数据库中获取到的图片路径

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vue3中,可以使用el-upload组件来上传图片后端Django。以下是一个简单的示例: 1. 安装el-upload和axios ``` npm install element-plus axios ``` 2. 在Vue组件中引入el-upload和axios ```vue <template> <el-upload class="upload-demo" action="/api/upload/" :on-success="handleSuccess" :before-upload="beforeUpload" :show-file-list="false" > <el-button size="small" type="primary">点击上传</el-button> </el-upload> </template> <script> import axios from 'axios' import { ElUpload, ElButton } from 'element-plus' export default { components: { ElUpload, ElButton }, methods: { beforeUpload(file) { // 可以在这里添加上传前的验证逻辑 }, handleSuccess(response, file, fileList) { console.log(response) // 在这里处理上传成功后的逻辑 } } } </script> ``` 3. 后端Django代码 在Django中,可以使用Django REST framework来处理文件上传。以下是一个简单的示例: ```python from rest_framework.views import APIView from rest_framework.parsers import MultiPartParser from rest_framework.response import Response class UploadView(APIView): parser_classes = [MultiPartParser] def post(self, request, format=None): file_obj = request.data['file'] # 处理文件上传的逻辑 return Response({'success': True}) ``` 在Django中,需要安装`djangorestframework`和`django-cors-headers`来处理跨域请求。可以使用以下命令来安装它们: ``` pip install djangorestframework django-cors-headers ``` 同时,需要在Django的`settings.py`文件中添加以下配置: ```python INSTALLED_APPS = [ 'rest_framework', 'corsheaders', # ... ] MIDDLEWARE = [ 'corsheaders.middleware.CorsMiddleware', 'django.middleware.common.CommonMiddleware', # ... ] CORS_ORIGIN_ALLOW_ALL = True ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

onlooker10086

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值