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 this函数调用无需再次抓获id,name或标签名
Mar 03 Javascript
JavaScript bold方法入门实例(把指定文字显示为粗体)
Oct 17 Javascript
jquery动态导航插件dynamicNav用法实例分析
Sep 06 Javascript
实例讲解jquery中mouseleave和mouseout的区别
Feb 17 Javascript
深入理解jQuery之事件移除
Jun 02 Javascript
详解Angular路由 ng-route和ui-router的区别
May 22 Javascript
JavaScript设置名字输入不合法的实现方法
May 23 Javascript
jQuery封装animate.css的实例
Jan 04 jQuery
详解angular如何调用HTML字符串的方法
Jun 30 Javascript
微信小程序实现左右列表联动
May 19 Javascript
jQuery实现简单评论功能
Aug 19 jQuery
JavaScript异步操作中串行和并行
Nov 20 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开发文件系统实例讲解
2006/10/09 PHP
kohana框架上传文件验证规则写法示例
2014/07/14 PHP
Windows下安装PHP单元测试环境PHPUnit图文教程
2014/10/24 PHP
win平台安装配置Nginx+php+mysql 环境
2016/01/12 PHP
jQuery获取注册信息并提示实现代码
2013/04/21 Javascript
js onmousewheel事件多次触发问题解决方法
2014/10/17 Javascript
jQuery使用before()和after()在元素前后添加内容的方法
2015/03/26 Javascript
JavaScript File API实现文件上传预览
2016/02/02 Javascript
Base64(二进制)图片编码解析及在各种浏览器的兼容性处理
2017/02/09 Javascript
jQuery自定义图片上传插件实例代码
2017/04/04 jQuery
JavaScript实现省市县三级级联特效
2017/05/16 Javascript
Javascript 一些需要注意的细节(必看篇)
2017/07/08 Javascript
node.js中grunt和gulp的区别详解
2017/07/17 Javascript
在Vue.js中使用Mixins的方法
2017/09/12 Javascript
mui框架移动开发初体验详解
2017/10/11 Javascript
JS中数据结构之栈
2019/01/01 Javascript
ES6 如何改变JS内置行为的代理与反射
2019/02/11 Javascript
Vue 指令实现按钮级别权限管理功能
2019/04/23 Javascript
利用Vue实现一个markdown编辑器实例代码
2019/05/19 Javascript
nuxt.js服务端渲染中axios和proxy代理的配置操作
2020/11/06 Javascript
[00:32]2018DOTA2亚洲邀请赛VGJ.T出场
2018/04/03 DOTA
python在windows下创建隐藏窗口子进程的方法
2015/06/04 Python
python实现根据主机名字获得所有ip地址的方法
2015/06/28 Python
pandas对指定列进行填充的方法
2018/04/11 Python
python自动查询12306余票并发送邮箱提醒脚本
2018/05/21 Python
配置 Pycharm 默认 Test runner 的图文教程
2018/11/30 Python
浅谈python脚本设置运行参数的方法
2018/12/03 Python
python opencv实现图像边缘检测
2019/04/29 Python
Python面向对象之多态原理与用法案例分析
2019/12/30 Python
Python实现剪刀石头布小游戏(与电脑对战)
2019/12/31 Python
用python解压分析jar包实例
2020/01/16 Python
python 基于wx实现音乐播放
2020/11/24 Python
自荐信包含哪些内容
2013/10/30 职场文书
大学生就业推荐表自我评价
2015/03/02 职场文书
请客吃饭开场白
2015/06/01 职场文书
小学2016年第十八届推普周活动总结
2016/04/05 职场文书