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 相关文章推荐
通过length属性判断jquery对象是否存在
Oct 18 Javascript
如何判断元素是否为HTMLElement元素
Dec 06 Javascript
在Linux上用forever实现Node.js项目自启动
Jul 09 Javascript
用js通过url传参把数据从一个页面传到另一个页面
Sep 01 Javascript
require.js深入了解 require.js特性介绍
Sep 04 Javascript
JQuery ztree 异步加载实例讲解
Feb 25 Javascript
个人网站留言页面(前端jQuery编写、后台php读写MySQL)
May 03 Javascript
jQuery的ajax下载blob文件
Jul 21 Javascript
AngularJS过滤器filter用法实例分析
Nov 04 Javascript
在vue中使用v-bind:class的选项卡方法
Sep 27 Javascript
Vue+ElementUI table实现表格分页
Dec 14 Javascript
Vue实现图书管理小案例
Dec 03 Vue.js
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
一个用php3编写的简单计数器
2006/10/09 PHP
一个简单的PHP验证码实现代码
2014/05/10 PHP
Laravel使用PHPQRCODE实现生成带有LOGO的二维码图片功能示例
2017/07/07 PHP
EasyUi tabs的高度与宽度根据IE窗口的变化自适应代码
2010/10/26 Javascript
学习从实践开始之jQuery插件开发 对话框插件开发
2012/04/26 Javascript
A标签中通过href和onclick传递的this对象实现思路
2013/04/19 Javascript
javascript 函数及作用域总结介绍
2013/11/12 Javascript
JS加载器如何动态加载外部js文件
2016/05/26 Javascript
checkbox批量选中,获取选中项的值的简单实例
2016/06/28 Javascript
domReady的实现案例
2016/11/23 Javascript
js实现小窗口拖拽效果
2016/12/03 Javascript
JavaScript使用简单正则表达式的数据验证功能示例
2017/01/13 Javascript
Bootstrap中glyphicons-halflings-regular.woff字体报404错notfound的解决方法
2017/01/19 Javascript
JS实现瀑布流布局
2017/10/21 Javascript
基于jquery.page.js实现分页效果
2018/01/01 jQuery
Vue.js单向绑定和双向绑定实例分析
2018/08/14 Javascript
nodejs分离html文件里面的js和css的方法
2019/04/09 NodeJs
vue下使用nginx刷新页面404的问题解决
2019/08/02 Javascript
JS实现可用滑块滑动的缓动图代码
2019/09/01 Javascript
Vue 打包的静态文件不能直接运行的原因及解决办法
2020/11/19 Vue.js
[12:29]《一刀刀一天》之DOTA全时刻19:蝙蝠骑士田伯光再度不举
2014/06/10 DOTA
Python 的 with 语句详解
2014/06/13 Python
python数据结构之图的实现方法
2015/07/08 Python
浅析Python中signal包的使用
2015/11/13 Python
python3.6+selenium实现操作Frame中的页面元素
2019/07/16 Python
python实现将字符串中的数字提取出来然后求和
2020/04/02 Python
毕业求职自荐信格式是什么
2013/11/19 职场文书
交警个人先进事迹材料
2014/05/11 职场文书
小学教师师德师风演讲稿
2014/08/22 职场文书
承诺书样本
2014/08/30 职场文书
2014教师年度思想工作总结
2014/11/10 职场文书
2014年检验员工作总结
2014/11/19 职场文书
2015年事业单位办公室文员工作总结
2015/04/24 职场文书
穆斯林的葬礼读书笔记
2015/06/26 职场文书
创业项目(超低成本创业项目)
2019/08/16 职场文书
如何利用Python实现n*n螺旋矩阵
2022/01/18 Python