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 相关文章推荐
滚动经典最新话题[prototype框架]下编写
Oct 03 Javascript
Tinymce+jQuery.Validation使用产生的BUG
Mar 29 Javascript
javascript 兼容所有浏览器的DOM扩展功能
Aug 01 Javascript
基于jQuery仿淘宝产品图片放大镜代码分享
Jun 23 Javascript
JS实现的自定义显示加载等待图片插件(loading.gif)
Jun 17 Javascript
jQuery展示表格点击变色、全选、删除
Jan 05 Javascript
ReactNative实现Toast的示例
Dec 31 Javascript
vuejs 动态添加input框的实例讲解
Aug 24 Javascript
详解小程序输入框闪烁及重影BUG解决方案
Aug 31 Javascript
Angular.JS读取数据库数据调用完整实例
Jul 02 Javascript
使用Vue CLI创建typescript项目的方法
Aug 09 Javascript
js实现简单音乐播放器
Jun 30 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接收POST数据,解析json数据
2013/06/28 PHP
php版淘宝网查询商品接口代码示例
2014/06/17 PHP
phpQuery让php处理html代码像jQuery一样方便
2015/01/06 PHP
wamp服务器访问php非常缓慢的解决过程
2015/07/01 PHP
php5.6.x到php7.0.x特性小结
2019/08/17 PHP
PHP架构及原理知识点详解
2019/12/22 PHP
对JavaScript的eval()中使用函数的进一步讨论
2008/07/26 Javascript
JavaScript学习笔记(十)
2010/01/17 Javascript
jquery 日期分离成年月日的代码
2010/05/14 Javascript
JS判断网页广告是否被浏览器拦截过滤的代码
2015/04/05 Javascript
IE中document.createElement的iframe无法设置属性name的解决方法
2015/09/14 Javascript
内容滑动切换效果jquery.hwSlide.js插件封装
2016/07/07 Javascript
json定义及jquery操作json的方法
2016/10/03 Javascript
javascript数据结构之串的概念与用法分析
2017/04/12 Javascript
详解vue.js之绑定class和style的示例代码
2017/08/24 Javascript
jQuery选择器之属性筛选选择器用法详解
2017/09/19 jQuery
Vue中的Vux配置指南
2017/12/08 Javascript
webpack多页面开发实践
2017/12/18 Javascript
Vue使用json-server进行后端数据模拟功能
2018/04/17 Javascript
微信小程序tabBar 返回tabBar不刷新页面
2019/07/25 Javascript
AntV F2和vue-cli构建移动端可视化视图过程详解
2019/10/08 Javascript
vue-router 路由传参用法实例分析
2020/03/06 Javascript
vue 实现click同时传入事件对象和自定义参数
2021/01/29 Vue.js
Python实现生成简单的Makefile文件代码示例
2015/03/10 Python
Python下载指定页面上图片的方法
2016/05/12 Python
python中print的不换行即时输出的快速解决方法
2016/07/20 Python
浅谈Django REST Framework限速
2017/12/12 Python
详解Ubuntu16.04安装Python3.7及其pip3并切换为默认版本
2019/02/25 Python
Python使用pyautocad+openpyxl处理cad文件示例
2019/07/11 Python
Python 中判断列表是否为空的方法
2019/11/24 Python
Python3 pickle对象串行化代码实例解析
2020/03/23 Python
什么是python的函数体
2020/06/19 Python
pip/anaconda修改镜像源,加快python模块安装速度的操作
2021/03/04 Python
教师绩效工资方案
2014/02/01 职场文书
公安交警中队队长个人对照检查材料思想汇报
2014/10/05 职场文书
浅谈由position属性引申的css进阶讨论
2021/05/25 HTML / CSS