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 相关文章推荐
js 操作select相关方法函数
Dec 06 Javascript
从面试题学习Javascript 面向对象(创建对象)
Mar 30 Javascript
jquery.autocomplete修改实现键盘上下键自动填充示例
Nov 19 Javascript
动态加载iframe时get请求传递中文参数乱码解决方法
May 07 Javascript
jQuery中Ajax的load方法详解
Jan 14 Javascript
js实现改进的仿蓝色论坛导航菜单效果代码
Sep 06 Javascript
基于jquery实现日历签到功能
Sep 11 Javascript
Bootstrap实现导航栏的2种方式
Nov 28 Javascript
Jquery Easyui对话框组件Dialog使用详解(14)
Dec 19 Javascript
浏览器事件循环与vue nextTicket的实现
Apr 16 Javascript
element表格翻页第2页从1开始编号(后端从0开始分页)
Dec 10 Javascript
JQuery实现折叠式菜单的详细代码
Jun 03 jQuery
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相关资料
2006/10/09 PHP
php中将一段数据存到一个txt文件中并显示其内容
2014/08/15 PHP
Yii2 rbac权限控制之菜单menu实例教程
2016/04/28 PHP
PHP MYSQL简易交互式站点开发
2016/12/27 PHP
php 算法之实现相对路径的实例
2017/10/17 PHP
JavaScript实际应用:innerHTMl和确认提示的使用
2006/06/22 Javascript
Jquery动态更改一张位图的src与Attr的使用
2013/07/31 Javascript
《JavaScript函数式编程》读后感
2015/08/07 Javascript
浅析JavaScript 调试方法和技巧
2015/10/22 Javascript
JavaScript编写简单的计算器
2015/11/25 Javascript
JS遍历数组及打印数组实例分析
2016/01/21 Javascript
JS正则表达式比较常见用法
2016/01/26 Javascript
深入理解JavaScript中的call、apply、bind方法的区别
2016/05/30 Javascript
折叠菜单及选择器的运用
2017/02/03 Javascript
深入解析js轮播插件核心代码的实现过程
2017/04/14 Javascript
shiro授权的实现原理
2017/09/21 Javascript
jQuery实现表单动态添加与删除数据操作示例
2018/07/03 jQuery
Vue实现自定义下拉菜单功能
2018/07/16 Javascript
微信小程序首页的分类功能和搜索功能的实现思路及代码详解
2018/09/11 Javascript
浅谈vue获得后台数据无法显示到table上面的坑
2020/08/13 Javascript
使用Django Form解决表单数据无法动态刷新的两种方法
2017/07/14 Python
Django实现跨域的2种方法
2019/07/31 Python
VC++笔试题
2014/10/13 面试题
委托证明的格式
2014/01/10 职场文书
网上商城创业计划书范文
2014/01/31 职场文书
公司贷款承诺书
2014/05/30 职场文书
2014年转正工作总结
2014/11/08 职场文书
2014年保卫科工作总结
2014/12/05 职场文书
教师节晚会主持词
2015/06/30 职场文书
小学生红领巾广播稿
2015/08/19 职场文书
小学语文教师研修日志
2015/11/13 职场文书
《雷雨》教学反思
2016/02/20 职场文书
2016年小学“我们的节日·中秋节”活动总结
2016/04/05 职场文书
上手简单,功能强大的Python爬虫框架——feapder
2021/04/27 Python
SpringCloud Function SpEL注入漏洞分析及环境搭建
2022/04/08 Java/Android
Mysql 如何合理地统计一个数据库里的所有表的数据量
2022/04/18 MySQL