当前位置: 首页 > news >正文

elementui组件el-upload实现批量文件上传

el-upload组件上传文件时,每传一个文件会调一次接口,所以当上传多个文件的时候,有 n 个文件就要调 n 次接口。

刚好之前工作中遇到使用el-upload组件批量上传文件的需求,来看看怎么实现。

思路:

1.取消组件的自动上传,使用自定义上传

2.组件开启多选文件

3.使用formData上传

html代码如下:

<el-uploadmultipleaction="#":http-request="handleHttpRequest":before-upload="handleBeforeUpload":file-list="fileList":limit="limit":requestUrl="requestUrl":show-file-list="true"class="upload-file-uploader"ref="fileUpload"><!-- 上传按钮 --><el-button size="mini" type="primary">选取文件</el-button><!-- 上传提示 --><div class="el-upload__tip" slot="tip" v-if="showTip">请上传<template v-if="fileSize">大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b></template><template v-if="fileType">格式为 <b style="color: #f56c6c">{{ fileType.join("/") }}</b></template>的文件</div></el-upload><el-button size="mini" type="primary" @click="submitUpload">上传</el-button>

data数据定义:

data() {return {limit: 50;uploadList: [],baseUrl: process.env.VUE_APP_BASE_API,fileList: [],fileData: [],};},

methods定义方法:

  methods: {// 覆盖默认的上传行为handleHttpRequest(obj) {this.fileData.push(obj.file);},submitUpload() {let formData = new FormData();for (let i = 0; i < this.fileData.length; i++) {formData.append("file", this.fileData[i]);}uploadFileResource(formData).then((res) => {if (res.code == "200") {this.$message.success("上传成功");this.uploadList = res.data.map((item)=>{return { name: item.fileName, url: item.url };})this.uploadList = [];this.$modal.closeLoading();} else {this.$message.error("上传失败");}});},// 上传前校检格式和大小handleBeforeUpload(file) {// 校检文件类型if (this.fileType) {const fileName = file.name.split(".");const fileExt = fileName[fileName.length - 1];const isTypeOk = this.fileType.indexOf(fileExt) >= 0;if (!isTypeOk) {this.$modal.msgError(`文件格式不正确, 请上传${this.fileType.join("/")}格式文件!`);return false;}}// 校检文件大小if (this.fileSize) {const isLt = file.size / 1024 / 1024 < this.fileSize;if (!isLt) {this.$modal.msgError(`上传文件大小不能超过 ${this.fileSize} MB!`);return false;}}return true;},
}

接口定义:

// 上传文件
export function uploadFileResource(data) {return request({url: '/common/uploadFileResource',method: 'post',headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, // 这句很重要,以formData的方式上传data})
}

上传效果图:


http://www.mrgr.cn/news/27083.html

相关文章:

  • Unity生命周期_一些容易忽略的点>重复的生命周期代码会执行子类的。
  • thinkphp6开发的通用网站系统源码
  • 明天考教资之作文素材
  • union和union all的区别,别再傻傻分不清楚了!
  • Python 爬虫入门 - 爬虫 requests 请求
  • 空间视频化趋势理解
  • String类型在javascript实际开发中常用的一些操作方法总结
  • UQpy | 不确定性量化Python工具箱推荐
  • Java代码审计篇 | ofcms系统审计思路讲解 - 篇4 | XXE漏洞审计
  • 【高等数学学习记录】函数
  • 5 个最佳开源无代码项目管理工具
  • 百年病态集论的症结:3000年不识伪≌直线段
  • 代码随想录算法训练营Day06 | 哈希表理论基础 、242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和
  • GEE 按范围导出 Sentinel-2 卫星影像
  • spark里使用geohash处理数据之线程安全问题
  • 极越造车2.0:01销量回暖,07杀出血路,ASD抢跑FSD
  • 深入理解指针(二)
  • Python中给定一个数组a = [2,3,9,1,0],找出其中最大的一个数,并打印出来 求解?
  • 大数据新视界 --大数据大厂之Kafka消息队列实战:实现高吞吐量数据传输
  • 36岁,大厂女程序员,中年失业后,我开始接受自己的平凡,并深耕自己