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

vue Element Ui Upload 上传 点击一个按钮,选择多个文件后直接上传,使用防抖解决多次上传的问题。

问题:

在使用Element Ui  Upload 上传文件时,选择多个文件上传时,on-change事件会一个一个返回上传的文件,导致前端不知道什么时候可以拿到全部上传的文件,再一起调后台接口。

解决方法:

上传文件后,自动把文件传给后台,这里做了一个防抖,等待500ms后在传给后台

代码实现:

 <el-upload class="upload-demo" ref="enclosureUpload" accept=".docx" :file-list="fileList" action multiple  :limit="7"

        :show-file-list="false" :auto-upload="false" :on-change="handleFileChange"

        :on-exceed="handleExceed" >

        <el-button type="info" size="small" plain round >

          上传

      </el-button>

  </el-upload>

 

// 文件超出个数限制时的钩子

    handleExceed (files, fileList) {

      this.$message.warning(`限制选择7个文件,本次选择了 ${files.length} 个文件`);

    },

    // 上传附件 过滤重复

    filterRepetition (arr) {

      let arr1 = []; //存id

      let newArr = []; //存新数组

      for (let i in arr) {

        if (arr1.indexOf(arr[i].name) == -1) {

          arr1.push(arr[i].name);

          newArr.push(arr[i]);

        }

      }

      return newArr;

    },

    // 修改 存放要上传的文件列表

    handleFileChange (file, fileList) {

      let arr = this.filterRepetition(fileList);

      if (arr.length !== fileList.length) {

        this.$message("上传重复文件,已过滤重复文件");

      }

      this.fileList = arr;

      // 上传文件后,自动把文件传给后台,这里做了一个防抖,等待500ms后在传给后台

      this.debounce(this.submitUpload, 500);

    },

    // element上传多个文件时,会把每个文件做个单独请求

    // 这里的方法是请求最后一次

    debounce (fn, waits) {

      if (this.timer) {

        clearTimeout(this.timer);

        this.timer = null;

      }

      this.timer = setTimeout(() => {

        fn.apply(this, arguments); // 把参数传进去

      }, waits);

    },

    // 确定

    async submitUpload () {

      if (this.fileList.length === 0) {

        this.$message.success("请上传文件");

        return;

      }

      let formData = new FormData(); //  用FormData存放上传文件

      this.fileList.forEach((file) => {

        formData.append("file", file.raw);

      });

      // 确定上传 把在上传列表里的文件 合并到formData里面传给后台

      let res = await importXlsx(formData);

      this.fileList = []

      this.$message.success('上传成功')

    }

http://www.lryc.cn/news/516346.html

相关文章:

  • 【HF设计模式】05-单例模式
  • 运维人员的Python详细学习路线
  • 软件体系结构与设计模式
  • 安徽省地图arcgis数据美化后mxd文件shp格式下载后内容测评
  • MySQL数据库备份与恢复策略
  • go语言zero框架中教务crm系统的在职继承和离职交接的设计与实践
  • C# 设计模式(结构型模式):桥接模式
  • C# 设计模式(行为型模式):解释器模式
  • 如何 cURL Elasticsearch:进入 Shell
  • 深信服云桌面系统的终端安全准入设置
  • Node.js 模块系统
  • 数据结构知识收集尊享版(迅速了解回顾相关知识)
  • SpringMVC启动与请求处理流程解析
  • C++ 日志库 spdlog 使用教程
  • `http_port_t
  • SpringBoot中实现拦截器和过滤器
  • 不锈钢均温板结合强力粘合技术革新手机内部架构
  • Docker安装使用
  • React 如何进行路由变化监听
  • Unity UGUI使用技巧与经验总结(不定期更新)
  • 中国乡镇界shp全境arcgis格式shp数据乡镇名称下载后内容测评
  • 第 31 章 - 源码篇 - Elasticsearch 写入流程深入分析
  • node.js下载、安装、设置国内镜像源(永久)(Windows11)
  • 小于n的最大数 - 贪心算法 - C++
  • 【顶刊TPAMI 2025】多头编码(MHE)之极限分类 Part 3:算法实现
  • 解决CentOS 8 YUM源更新后报错问题:无法下载AppStream仓库元数据
  • [python3]Excel解析库-openpyxl
  • Docker 远程访问完整配置教程以及核心参数理解
  • 王老吉药业SRM系统上线 携手隆道共启战略合作新篇章
  • MyBatis 配置文件全解析