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 相关文章推荐
JavaScript DOM 添加事件
Feb 14 Javascript
jQuery.buildFragment使用方法及思路分析
Jan 07 Javascript
jQuery scroll事件实现监控滚动条分页示例
Apr 04 Javascript
js html5 css俄罗斯方块游戏再现
Oct 17 Javascript
js实现刷新页面后回到记录时滚动条的位置【两种方案可选】
Dec 12 Javascript
详解javascript获取url信息的常见方法
Dec 19 Javascript
jquery.zclip轻量级复制失效问题
Jan 08 Javascript
vue 组件高级用法实例详解
Apr 11 Javascript
代码整洁之道(重构)
Oct 25 Javascript
jQuery+vue.js实现的多选下拉列表功能示例
Jan 15 jQuery
微信小程序实现蓝牙打印
Sep 23 Javascript
JavaScript制作3D旋转相册
Aug 02 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
ThinkPHP3.0略缩图不能保存到子目录的解决方法
2012/09/30 PHP
JavaScript调用客户端的可执行文件(示例代码)
2013/11/28 Javascript
Javascript 按位与赋值运算符 (&amp;=)使用介绍
2014/02/04 Javascript
js上传图片及预览功能实例分析
2015/04/24 Javascript
浅谈jQuery中height与width
2015/07/06 Javascript
微信小程序 navigation API实例详解
2016/10/02 Javascript
详解AngularJS中的表单验证(推荐)
2016/11/17 Javascript
根据Bootstrap Paginator改写的js分页插件
2016/12/25 Javascript
Vue.js自定义指令的用法与实例解析
2017/01/18 Javascript
BootStrap daterangepicker 双日历控件
2017/06/02 Javascript
VUE2实现事件驱动弹窗示例
2017/10/21 Javascript
详解Angular5 路由传参的3种方法
2018/04/28 Javascript
vue表单中遍历表单操作按钮的显示隐藏示例
2019/10/30 Javascript
JS实现的进制转换,浮点数相加,数字判断操作示例
2019/11/09 Javascript
javascript利用canvas实现鼠标拖拽功能
2020/07/23 Javascript
vue 使用vant插件做tabs切换和无限加载功能的实现
2020/11/04 Javascript
[00:36]我的中国心——Serenity vs Fnatic
2018/08/21 DOTA
[55:56]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.22
2019/09/05 DOTA
Python的Bottle框架的一些使用技巧介绍
2015/04/08 Python
利用Tkinter(python3.6)实现一个简单计算器
2017/12/21 Python
python最长回文串算法
2018/06/04 Python
python 移除字符串尾部的数字方法
2018/07/17 Python
Python装饰器语法糖
2019/01/02 Python
python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形)
2019/05/30 Python
python argparse模块通过后台传递参数实例
2020/04/20 Python
tensorflow转换ckpt为savermodel模型的实现
2020/05/25 Python
Elasticsearch py客户端库安装及使用方法解析
2020/09/14 Python
关于老式浏览器兼容HTML5和CSS3的问题
2016/06/01 HTML / CSS
财务管理专业毕业生求职信范文
2013/09/21 职场文书
简单而又朴实的个人求职信分享
2013/12/12 职场文书
优秀班组长事迹
2014/05/31 职场文书
小学生常见病防治方案
2014/06/06 职场文书
死亡诗社观后感
2015/06/05 职场文书
pytorch DataLoader的num_workers参数与设置大小详解
2021/05/28 Python
React列表栏及购物车组件使用详解
2021/06/28 Javascript