当前位置: 首页 > 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.lryc.cn/news/438252.html

相关文章:

  • 【JAVA入门】Day45 - 压缩流 / 解压缩流
  • Qt_自定义信号
  • 【运维方案】某系统运维需求方案参考(doc全原件2024)
  • Linux环境使用Git同步教程
  • c++临时对象导致的生命周期问题
  • CSP-J 算法基础 深度优先搜索
  • LeetCode题练习与总结:基本计算器 Ⅱ--227
  • Elasticsearch基础(七):Logstash如何开启死信队列
  • c语言--力扣简单题目(链表的中间节点)讲解
  • 【STM32 Blue Pill编程】-定时器计数模式
  • 【例题】lanqiao1331 二进制中 1 的个数
  • 【论文解读】图像序列识别:CRNN技术在场景文本识别中的应用与突破(附论文地址)
  • Vue3+CesiumJS相机定位camera
  • turbo译码算法MAX, MAX_SCALE and MAX_STAR的比较
  • 关于HarmonyOS的学习
  • 【雅特力AT32】搭建模板工程及GPIO点灯操作
  • 实战千问2大模型第三天——Qwen2-VL-7B(多模态)视频检测和批处理代码测试
  • 数据库索引底层数据结构之B+树MySQL中的页索引分类【纯理论干货,面试必备】
  • 编译QT源码时的configure参数须知
  • 如何利用人工智能大模型来进行数字化营销?
  • 【MRI基础】回波序列长度-echo train length ETL概念
  • (179)时序收敛--->(29)时序收敛二九
  • [Visual Stuidio 2022使用技巧]2.配置及常用快捷键
  • 每日奇难怪题(持续更新)
  • 江协科技STM32学习- P13 TIM定时器中断
  • git github仓库管理
  • 【JavaEE】线程安全性问题,线程不安全是怎么产生的,该如何应对
  • 低代码-赋能新能源汽车产业加速前行
  • 基于UDP的简易网络通信程序
  • AI大模型在知识管理平台上的应用:泛微·采知连实现自动采集.精准搜索.智能问答.主动推荐