element-ui中el-upload多文件一次性上传的实现


Posted in Javascript onDecember 02, 2020

项目需求是多个文件上传,在一次请求中完成,而ElementUI的上传组件是每个文件发一次上传请求,因此我们借助FormData的格式向后台传文件组

html代码

<div class="upload-file">
 <el-upload
   accept=".xlsx"
   ref="upload"
   multiple
   :limit="5"
   action="http://xxx.xxx.xxx/personality/uploadExcel"
   :on-preview="handlePreview"
   :on-change="handleChange"
   :on-remove="handleRemove"
   :on-exceed="handleExceed"
   :file-list="fileList"
   :http-request="uploadFile"
   :auto-upload="false">
   <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
   <el-button style="margin-left: 133px;" size="small" type="success" @click="submitUpload">上传到服务器
   </el-button>
   <div slot="tip" class="el-upload__tip">只能上传xlsx文件,且不超过100m</div>
 </el-upload>
 </div>

修改:auto-upload="false"属性为false,阻止组件的自动上传
:http-request="uploadFile"覆盖上传事件
@click=“submitUpload”,给上传按钮绑定事件

element-ui中el-upload多文件一次性上传的实现

data() {
	return {
		fileData: '', // 文件上传数据(多文件合一)
		fileList: [],  // upload多文件数组
		uploadData: {
     fieldData: {
      id: '', // 机构id,
     }
    },
	}
}


methods:{
		// 上传文件
		uploadFile(file) {
		  this.fileData.append('files', file.file); // append增加数据
		},
		
		// 上传到服务器
	   submitUpload() {
	      let fieldData = this.uploadData.fieldData; // 缓存,注意,fieldData不要与fileData看混
	      if (fieldData.id === '') {
	        this.$message({
	          message: '请选择上传机构',
	          type: 'warning'
	        })
	      } else if (this.fileList.length === 0) {
	        this.$message({
	          message: '请先选择文件',
	          type: 'warning'
	        })
	      } else {
	        const isLt100M = this.fileList.every(file => file.size / 1024 / 1024 < 100);
	        if (!isLt100M) {
	          this.$message.error('请检查,上传文件大小不能超过100MB!');
	        } else {
	          this.fileData = new FormData(); // new formData对象
	          this.$refs.upload.submit(); // 提交调用uploadFile函数
	          this.fileData.append('pathId', fieldData.id); // 添加机构id
	          this.fileData.append('loginToken', this.loginToken); // 添加token
	          post(this.baseUrlData.url_02 + ":8090/personality/uploadExcel", this.fileData).then((response) => {
	            if (response.data.code === 0) {
	              this.$message({
	                message: "上传成功",
	                type: 'success'
	              });
	              this.fileList = [];
	            } else {
	              this.$message({
	                message: response.data.desc,
	                type: 'error'
	              })
	            }
	          });
	        }
	      }
	    },
	    
      //移除
      handleRemove(file, fileList) {
        this.fileList = fileList;
        // return this.$confirm(`确定移除 ${ file.name }?`);
      },

      // 选取文件超过数量提示
      handleExceed(files, fileList) {
        this.$message.warning(`当前限制选择 5 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`);
      },	   

			 //监控上传文件列表
      handleChange(file, fileList) {
        let existFile = fileList.slice(0, fileList.length - 1).find(f => f.name === file.name);
        if (existFile) {
          this.$message.error('当前文件已经存在!');
          fileList.pop();
        }
        this.fileList = fileList;
      },
}

此时就达到上传4个文件只发送了一个xhr请求了

element-ui中el-upload多文件一次性上传的实现

到此这篇关于element-ui中el-upload多文件一次性上传的实现的文章就介绍到这了,更多相关el-upload多文件上传内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
Chrome Form多次提交表单问题的解决方法
May 09 Javascript
js禁止document element对象选中文本实现代码
Mar 21 Javascript
JS去除右边逗号的简单方法
Jul 03 Javascript
jquery调取json数据实现省市级联的方法
Jan 29 Javascript
jquery+ajax请求且带返回值的代码
Aug 12 Javascript
jquery+ajax+text文本框实现智能提示完整实例
Jul 09 Javascript
浅谈JavaScript中面向对象的的深拷贝和浅拷贝
Aug 01 Javascript
解决wx.onMenuShareTimeline出现的问题
Aug 16 Javascript
js H5 canvas投篮小游戏
Aug 18 Javascript
常用Javascript函数与原型功能收藏(必看篇)
Oct 09 Javascript
JSON对象转化为字符串详解
Aug 11 Javascript
JavaScript中数组去重的5种方法
Jul 04 Javascript
element-plus一个vue3.xUI框架(element-ui的3.x 版初体验)
Dec 02 #Vue.js
keep-alive保持组件状态的方法
Dec 02 #Javascript
vue组件中节流函数的失效的原因和解决方法
Dec 02 #Vue.js
Vue3+elementui plus创建项目的方法
Dec 01 #Vue.js
JS实现超级好看的鼠标小尾巴特效
Dec 01 #Javascript
echarts饼图各个板块之间的空隙如何实现
Dec 01 #Javascript
浅谈es6中的元编程
Dec 01 #Javascript
You might like
php IP及IP段进行访问限制的代码
2008/12/17 PHP
PHP新手入门学习方法
2011/05/08 PHP
PHP中使用memcache存储session的三种配置方法
2014/04/05 PHP
PHP中的数组处理函数实例总结
2016/01/09 PHP
php面试实现反射注入的详细方法
2019/09/30 PHP
Gambit vs ForZe BO3 第一场 2.13
2021/03/10 DOTA
Javascript 代码也可以变得优美的实现方法
2009/06/22 Javascript
javascript使用switch case实现动态改变超级链接文字及地址
2014/12/16 Javascript
jquery中one()方法的用法实例
2015/01/16 Javascript
PhantomJS快速入门教程(服务器端的 JavaScript API 的 WebKit)
2015/08/06 Javascript
JS实现隐藏同级元素后只显示JS文件内容的方法
2016/09/04 Javascript
微信小程序本作用域下调用全局JS详解及实例
2017/02/22 Javascript
原生javascript实现的全屏滚动功能示例
2017/09/19 Javascript
在iFrame子页面里实现模态框的方法
2018/08/17 Javascript
mpvue全局引入sass文件的方法步骤
2019/03/06 Javascript
解决vue.js中settimeout遇到的问题(时间参数短效果不稳定)
2020/07/21 Javascript
详解Vue3.0 + TypeScript + Vite初体验
2021/02/22 Vue.js
[02:00]DOTA2英雄COSPLAY闹市街头巡游助威2015国际邀请赛
2015/08/02 DOTA
Python爬虫框架Scrapy安装使用步骤
2014/04/01 Python
TensorFlow tensor的拼接实例
2020/01/19 Python
详解css3 Transition属性(平滑过渡菜单栏案例)
2017/09/05 HTML / CSS
香港卓悦化妆品官网:BONJOUR
2017/09/21 全球购物
美国唇部护理专家:Sara Happ
2019/06/19 全球购物
Yankee Candle官网:美国最畅销蜡烛品牌之一
2020/01/05 全球购物
沙特阿拉伯家用电器和电子产品购物网站:Sheta and Saif
2020/04/03 全球购物
Python是如何进行类型转换的
2013/06/09 面试题
岗位职责定义及内容
2013/11/08 职场文书
电子邮箱格式怎么写
2014/01/12 职场文书
中国好声音广告词
2014/03/18 职场文书
《李广射虎》教学反思
2014/04/27 职场文书
热爱祖国演讲稿
2014/05/04 职场文书
法律顾问服务方案
2014/05/15 职场文书
2015年大班保育员工作总结
2015/05/18 职场文书
孟佩杰观后感
2015/06/17 职场文书
《妈妈别哭,有我在》读后感3篇
2020/01/13 职场文书
Python实现socket库网络通信套接字
2021/06/04 Python