当前位置: 首页 > news >正文

element-ui解决上传文件时需要携带请求数据的问题

一、问题描述

在前端使用element-ui进行文件上传时,需要携带请求头信息,比如Token

二、问题解决

1. 表单实现

  1. action置空
  2. 添加:http-request属性覆盖默认的上传行为,实现自定义上传文件。
  3. 注意:src后的图片路径如果是个网络请求(外链),那么在前面拼接//即可,否则会出现localhost:8080/外链的奇葩问题。
<el-uploadclass="avatar-uploader"name="img"action="":show-file-list="false":on-success="handleAvatarSuccess":before-upload="beforeAvatarUpload":http-request="handleUploadAvatar"><img v-if="userInfoObj.avatar" :src="userInfoObj.avatar?'//'+userInfoObj.avatar:'static/img/tou.jpg'"  :onerror="$store.state.errorImg" class="avatar"><i v-else class="el-icon-plus avatar-uploader-icon"></i><div slot="tip" class="el-upload__tip">点击上传头像,只能上传jpg/png文件,且不超过1mb</div>
</el-upload>

2. js代码

  1. 创建handleUploadAvatar()函数,传入参数param,其中的param就是表单的文件对象。
  2. 创建FormData对象,封装请求体作为请求数据,将文件对象里面的文件以及需要携带的请求数据封装(比如需要携带id信息等)进请求体。
  3. 创建url,即请求地址。
  4. 创建config对象,配置请求头信息,注意文件上传时,Content-Type必须为multipart/form-data
  5. 使用axios发起post请求。
  6. 注意此时element-ui组件上的:on-success="handleAvatarSuccess"会不生效,因为禁用了action这个默认实现方式,要想在上传文件成功后调用on-success 声明的函数,只需要手动调用一下即可。
<script>
import store from '../store'
import axios from 'axios'
import {getToken} from '../utils/auth.js'export default {name: 'UserInfo',data() { //选项 / 数据return {uploadURL:'',userInfo:{},userInfoObj:'',}},methods: {beforeAvatarUpload(file) {// 上传头像成功前校验const isJPG = file.type == 'image/png'||file.type=='image/jpg'||file.type=='image/jpeg';const isLt2M = file.size / 1024 / 1024 < 1;if (!isJPG) {this.$message.error('上传头像图片只能是 JPG/JPEG/PNG 格式!');}if (!isLt2M) {this.$message.error('上传头像图片大小不能超过 1MB!');}return isJPG && isLt2M;},handleUploadAvatar(param) {let fileObj = param.file // 相当于input里取得的fileslet fd = new FormData()// FormData 对象fd.append('img', fileObj)// 文件对象let url = this.uploadURLlet config = {headers: {'Content-Type': 'multipart/form-data',Token: getToken()}}axios.post(url, fd, config).then(res => {if(res.status === 200){// 将服务端返回的数据传递给文件上传成功的函数param.onSuccess(res.data)}})},handleAvatarSuccess(res, file) {// 上传头像成功后赋值if(res.code == 200){this.userInfoObj.avatar = res.data;}else{this.$message.error('上传图片失败');}}},created() {this.uploadURL = store.state.baseURL + 'upload'}}
</script>
http://www.lryc.cn/news/301169.html

相关文章:

  • 【AI视野·今日NLP 自然语言处理论文速览 第七十九期】Thu, 18 Jan 2024
  • Docker容器运行
  • 【计算机网络】网络层之IP协议
  • 2024/2/17 图论 最短路入门 dijkstra 1
  • 交通管理|交通管理在线服务系统|基于Springboot的交通管理系统设计与实现(源码+数据库+文档)
  • 最适合初学者的Python入门详细攻略,一文讲清,赶紧收藏!
  • 幻兽帕鲁新手游戏攻略分享
  • 代码随想录算法训练营DAY19 | 二叉树 (6)
  • 【C++】实现Date类的各种运算符重载
  • 【Linux】程序地址空间 -- 详解 Linux 2.6 内核进程调度队列 -- 了解
  • 10-通用类型、特质和生命周期
  • STM32CubeMX,定时器之定时功能,入门学习,如何设置prescaler,以及timer计算PWM输入捕获方法(重要)
  • 蓝桥杯:C++队列、优先队列、链表
  • 【C语言】长篇详解,字符系列篇1-----“混杂”的各种字符类型字符转换和strlen的模拟实现【图文详解】
  • 2024年【高处安装、维护、拆除】考试总结及高处安装、维护、拆除考试技巧
  • 开源无处不在,发展创新下又有何弊端
  • LeetCode 0429.N 叉树的层序遍历:广度优先搜索(BFS)
  • Practical User Research for Enterprise UX
  • 文生视频:Sora模型报告总结
  • GA 374-2019 电子防盗锁检测
  • 代码随想录day26 Java版
  • 英文论文(sci)解读复现【NO.21】一种基于空间坐标的轻量级目标检测器无人机航空图像的自注意
  • 数据集合
  • php基础学习之作用域和静态变量
  • SP1:基于Plonky3构建的zkVM
  • Python爬虫之文件存储#5
  • Spring Boot 笔记 012 创建接口_添加文章分类
  • Spring-面试题
  • Flink理论—容错之状态
  • 【数据结构】链表OJ面试题5《链表的深度拷贝》(题库+解析)