当前位置: 首页 > 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>

相关文章:

  • 用Python来实现2024年春晚刘谦魔术
  • 操作系统面试问题——说一下什么是零拷贝?
  • 蓝桥杯刷题--python-4
  • 域名解析大概过程笔记
  • Dubbo集成Zookeeper embbed模式
  • 屏幕字体种类介绍
  • 第62讲商品搜索动态实现以及性能优化
  • CVE-2022-0760 漏洞复现
  • 力扣:376. 摆动序列
  • vue监视和深度监视
  • 红队打靶练习:GLASGOW SMILE: 1.1
  • DS Wannabe之5-AM Project: DS 30day int prep day14
  • Spring Cloud Neflix Hystrix应用实战详解
  • IM聊天系统为什么需要做消息幂等?如何使用Redis以及Lua脚本做消息幂等【第12期】
  • 如何把手机平板变为电脑的屏幕
  • 【前端学习】-粗谈选择器
  • 5、React组件事件详解
  • Angular6错误 Service: No provider for Renderer2
  • css的样式优先级
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • gitlab-ci配置详解(一)
  • Javascripit类型转换比较那点事儿,双等号(==)
  • JavaScript HTML DOM
  • java中的hashCode
  • Mac转Windows的拯救指南
  • oldjun 检测网站的经验
  • Promise面试题,控制异步流程
  • Python中eval与exec的使用及区别
  • React-生命周期杂记
  • 开源地图数据可视化库——mapnik
  • 前端面试之CSS3新特性
  • 删除表内多余的重复数据
  • 微服务入门【系列视频课程】
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 《天龙八部3D》Unity技术方案揭秘
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • !!Dom4j 学习笔记
  • #162 (Div. 2)
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • $.each()与$(selector).each()
  • (10)ATF MMU转换表
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转)ABI是什么
  • *** 2003
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .chm格式文件如何阅读
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法