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 相关文章推荐
对 lightbox JS 图片控件进行了一下改造, 使其他支持复杂的图片说明
Mar 20 Javascript
js 调用本地exe的例子(支持IE内核的浏览器)
Dec 26 Javascript
深入document.write()与HTML4.01的非成对标签的详解
May 08 Javascript
node.js中的fs.fchown方法使用说明
Dec 16 Javascript
深入理解jquery自定义动画animate()
May 24 Javascript
jquery弹出框插件jquery.ui.dialog用法分析
Aug 20 Javascript
vue2 中如何实现动态表单增删改查实例
Jun 09 Javascript
详解使用vuex进行菜单管理
Dec 21 Javascript
详解JavaScript栈内存与堆内存
Apr 04 Javascript
javascript实现抢购倒计时程序
Aug 26 Javascript
node.js中npm包管理工具用法分析
Feb 14 Javascript
JavaScript实现淘宝商品图切换效果
Apr 29 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与ASP
2006/10/09 PHP
从康盛产品(discuz)提取出来的模板类
2011/06/28 PHP
PHP 类相关函数的使用详解
2013/05/10 PHP
PHP+redis实现的悲观锁机制示例
2018/06/12 PHP
javascript 树控件 比较好用
2009/06/11 Javascript
11个用于提高排版水平的基于jquery的文字效果插件
2012/09/14 Javascript
js点击更换背景颜色或图片的实例代码
2013/06/25 Javascript
js获取客户端外网ip的简单实例
2013/11/21 Javascript
jQuery的css()方法用法实例
2014/12/24 Javascript
javascript 中的事件委托详解
2016/10/25 Javascript
学习使用jQuery表单验证插件和日历插件
2017/02/13 Javascript
javascript设计模式之模块模式学习笔记
2017/02/15 Javascript
bootstrap的工具提示实例代码
2017/05/17 Javascript
详解node-ccap模块生成captcha验证码
2017/07/01 Javascript
微信小程序返回多级页面的实现方法
2017/10/27 Javascript
基于JavaScript实现瀑布流布局
2018/08/15 Javascript
vue动画打包后失效问题的解决方法
2018/09/18 Javascript
vue-cli中使用高德地图的方法示例
2019/03/28 Javascript
原生javascript单例模式的应用实例分析
2020/02/23 Javascript
vue-cli4项目开启eslint保存时自动格式问题
2020/07/13 Javascript
Vue proxyTable配置多个接口地址,解决跨域的问题
2020/09/11 Javascript
python使用Tkinter显示网络图片的方法
2015/04/24 Python
在Python中用has_key()方法查找键是否存在的教程
2015/05/21 Python
python学习之编写查询ip程序
2016/02/27 Python
不可错过的十本Python好书
2017/07/06 Python
Python如何通过subprocess调用adb命令详解
2017/08/27 Python
python3实现基于用户的协同过滤
2018/05/31 Python
Python图像的增强处理操作示例【基于ImageEnhance类】
2019/01/03 Python
pycharm的python_stubs问题
2020/04/08 Python
解决python3.x安装numpy成功但import出错的问题
2020/11/17 Python
美国波西米亚风格服装品牌:Show Me Your Mumu
2018/01/05 全球购物
英国婴儿及儿童产品商店:TigerParrot
2019/03/04 全球购物
澳大利亚运动鞋商店:Platypus Shoes
2019/09/27 全球购物
2015年新学期寄语
2015/02/26 职场文书
nginx常用命令放入shell脚本详解
2021/03/31 Servers
教你用python实现一个无界面的小型图书管理系统
2021/05/21 Python