elementUI中el-upload的使用以及遇到的坑(手动上传案例)

news2024/11/20 8:23:46

做项目时遇到一个需求,支持同时上传多个图片。element-ui 的 upload 组件支持多选文件,只需要配置参数 multiple 为 true 即可。但是这个组件默认会将多选的文件分多次进行上传,于是就会存在多次的上传请求(即同时上传3个文件,会同时调用3次上传接口,如图),由于后台的接口要求是一次请求能够上传多个文件,且我们也知道请求多了会对服务器造成更大的压力。
在这里插入图片描述
在这里插入图片描述
那么就要想办法解决上述问题,也就是说无论用户同时上传多少个文件,都只调用一个上传接口。

方法1:通过配置file-list

  1. auto-upload 设置为false,关闭组件的自动上传功能;
  2. file-list 配置一个数组用于接收上传的文件列表;
  3. multiple 设置为 true表示支持多选文件;
  4. accept 配置上传文件的类型;
  5. limit配置最大允许上传个数;
  6. 通过点击按钮手动调用上传函数 submitUpload ,创建一个 FormData 把 fileList 的文件存进去。

html部分:

<el-upload
            class="upload-demo"
            ref="upload"
            accept=".png,.jpg"
            action="#"
            :limit="5"
            multiple
            :on-exceed="onExceed"
            :file-list="fileList"
            :on-change="handlChange"
            :auto-upload="false"
          >
            <div style="display: flex; align-items: center">
              <el-button slot="trigger" size="small" plain>选取文件</el-button>
              <div
                slot="tip"
                class="el-upload__tip el-icon-warning-outline"
                style="margin-left: 10px; color: #f56c6c"
              >
                只能上传.png,.jpg文件
              </div>
            </div>
          </el-upload>
            <el-button type="primary" @click.stop="submitUpload"
              >上 传</el-button
            >
         

js部分:

 data() {
    return {
      fileList: [],   
    };
  },
 methods: {
    handlChange(file, fileList) {
      this.fileList = fileList;
    },
    // 上传文件超出报错
    onExceed(files, fileList) {
      this.$tool.message(`目前只支持上传5个文件, 请删除后再次选择!`, "error");
    },
    // 上传到后台
    async submitUpload() {
      if (this.$refs.upload.uploadFiles.length > 0) {
        const formData = new FormData();//  用FormData存放上传文件
        this.fileList.forEach((file) => {
          formData.append("files", file.raw);
        });
        //uploadBootLogo是上传接口
        await uploadBootLogo(formData).then((res) => {
          this.$tool.message("上传成功", "success");
          this.fileList = [];
        });
      } else {
        this.$tool.message("请上传资源文件", "error");
      }
    },
  },

方法2:配置http-request

  1. http-request 自定义上传方法;
  2. 通过点击按钮手动调用上传函数 submitUpload,创建一个 FormData, 调用 upload 组件的 submit 方法的时候会循环调用 http-request 配置的方法,从而往 FormData 里存放文件。

html部分:

<el-upload
            class="upload-demo"
            ref="upload"
            accept=".png,.jpg"
            action="#"
            :limit="5"
            multiple
            :on-exceed="onExceed"
            :file-list="fileList"
            :on-change="handlChange"
            :auto-upload="false"
            :http-request="uploadFile"
          >
            <div style="display: flex; align-items: center">
              <el-button slot="trigger" size="small" plain>选取文件</el-button>
              <div
                slot="tip"
                class="el-upload__tip el-icon-warning-outline"
                style="margin-left: 10px; color: #f56c6c"
              >
                只能上传.png,.jpg文件
              </div>
            </div>
          </el-upload>
            <el-button type="primary" @click.stop="submitUpload"
              >上 传</el-button
            >
         

js部分:

 data() {
    return {
      fileList: [],
      filedata: new FormData(),   
    };
  },
 methods: {

    // 上传到后台
    async submitUpload() {
      if (this.$refs.upload.uploadFiles.length > 0) {
        let tempData = this.filedata;
        this.filedata = new FormData();//  用FormData存放上传文件
        this.$refs.upload.submit();// 会循环调用uploadFile方法,多个文件调用多次
        //uploadBootLogo是上传接口
        await uploadBootLogo(this.filedata).then((res) => {
          this.$tool.message("上传成功", "success");
          this.fileList = [];
        });
      } else {
        this.$tool.message("请上传资源文件", "error");
      }
    },
     // 上传文件
    uploadFile(file) {
      this.filedata.append("files", file.file);
    },
    handlChange(file, fileList) {
      this.fileList = fileList;
    },
    // 上传文件超出报错
    onExceed(files, fileList) {
      this.$tool.message(`目前只支持上传5个文件, 请删除后再次选择!`, "error");
    },
  },

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/686457.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

46从零开始学Java之静态代码块和静态类、静态导入

作者&#xff1a;孙玉昌&#xff0c;昵称【一一哥】&#xff0c;另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 在上一篇文章中&#xff0c;壹哥给大家讲解了static静态关键字&#xff0c;以及静态变量、静态常量和…

C4.5算法

假设我们有一个关于餐厅顾客的数据集&#xff0c;其中包括9个样本&#xff0c;每个样本有3个属性&#xff1a;天气、是否有预订和是否是周末&#xff0c;以及一个类别标签&#xff0c;表示该顾客是否会来餐厅&#xff08;是或否)。 数据集如下&#xff1a; 使用C4.5算法来构建…

DAMO-YOLO:一种平衡速度和准确性的新目标检测框架

DAMO-YOLO&#xff1a;一种平衡速度和准确性的新目标检测框架 1.介绍2.关键技术2.1. NAS主干网络&#xff1a;MAE-NAS2.2. Large Neck&#xff1a;RepGFPN2.3. Small Head&#xff1a;ZeroHead2.4. 标签分配&#xff1a;AlignOTA2.5 模型蒸馏 3.性能效果展示 作者&#xff1a;K…

CART算法

假设我们有一个二元分类问题&#xff0c;数据集包含以下四个样本&#xff1a; 特征1特征2类别0.20.310.40.500.60.700.80.90 可以使用CART算法来建立一个决策树模型。 1、首先&#xff0c;我们需要选择一个特征和阈值来对数据集进行划分。假设我们选择特征1和阈值0.5&#x…

基于Java中国咖啡文化宣传网站设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

IDEA创建maven工程JDBC连接MySQL数据库中的遇到的问题以及相应的解决方案

首先创建一个maven工程 然后点击进入pom.xml文件&#xff0c;输入安装依赖。 输入数据库配置文件原码&#xff1a; <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.49</version>…

Docker 中的 .NET 异常了怎么抓 Dump

一&#xff1a;背景 1. 讲故事 有很多朋友跟我说&#xff0c;在 Windows 上看过你文章知道了怎么抓 Crash, CPU爆高&#xff0c;内存暴涨 等各种Dump&#xff0c;为什么你没有写在 Docker 中如何抓的相关文章呢&#xff1f;瞧不上吗&#xff1f; 哈哈&#xff0c;在DUMP的分…

Flutter 组件(三)按钮类组件

Flutter开发笔记 Flutter 组件&#xff08;三&#xff09;按钮类组件 - 文章信息 - Author: Jack Lee (jcLee95) Visit me at: https://jclee95.blog.csdn.netEmail: 291148484163.com. Shenzhen ChineAddress of this article:https://blog.csdn.net/qq_28550263/article/det…

Prophet 时间序列预测框架入门实践笔记

1. Prophet时间序列预测框架概述 Prophet是Facebook开源的一种时间序列预测框架&#xff0c;旨在使时间序列分析更加容易和快速。Prophet可以处理具有多个季节性和突发事件的时间序列数据&#xff0c;并且在数据缺失或异常情况下仍然能够进行良好的预测。Prophet采用了一种基于…

荣耀电脑怎么用U盘重装系统?荣耀电脑用U盘重装Win10系统教程

荣耀电脑怎么用U盘重装系统&#xff1f;用户想用U盘来给荣耀电脑重装Win10系统&#xff0c;但是不知道怎么操作才能完成Win10系统的重装&#xff0c;这时候用户需要准备一个大于8G的U盘&#xff0c;还有一个能够正常联网的荣耀电脑&#xff0c;最后根据小编分享的荣耀电脑用U盘…

Linux文件系统论述

目录 前言 一.磁盘 1.1定义 1.2结构 1.3磁盘的寻找方式 1.4磁盘的逻辑/线性结构 1.5磁盘访问的基本单位 1.6磁盘的管理 二.Linux文件系统 2.1系统结构 2.2属性解析&#xff1a; 2.3inode相关块的解析&#xff1a; 2.4数据块的解析&#xff1a; 前言 学了一段时间的Linux操…

DIM-00019、Unable to OpenSCManager: err=5、DBT-50000

在windows server 2016上安装部署Oracle 19C&#xff0c;出现较多的问题。 例如在DBCA建库时出现[DBT-50000]无法检查可用内存报错&#xff1a; 根据MOS文档&#xff1a;DBCA fails with errors: [FATAL] [DBT-50000] Unable to check for available memory in “Specify conf…

算法05-排序算法

算法05-排序算法 总结大纲要求【 3 】排序的基本概念各种排序算法 【 3 】冒泡排序&#xff08;Bubble Sort&#xff09;冒泡排序排序规则冒泡排序优化 【 3 】选择排序&#xff08;Selection Sort&#xff09;【 3 】插入排序&#xff08;Insertion Sort&#xff09;题目描述…

怎么高效编写企业内部FAQ文档呢?

企业内部FAQ文档是指包含常见问题和答案的文档&#xff0c;旨在为企业内部员工提供帮助和解答。编写这样的文档可以帮助企业内部员工更好地理解和掌握公司的政策和流程&#xff0c;提高工作效率。 编写企业内部FAQ文档的一些高效方法&#xff1a; 确定文档的范围和目标受众 …

Windows11安装oneAPI和Visual Studio 2022配置Fortran并行环境

Windows11安装oneAPI和Visual Studio 2022配置Fortran并行环境 安装Visual Studio 2022 Community安装oneAPI建立Fortran工程项目测试建立单核运行的Fortran运行算例建立并行运行的Fortran运行算例 结语 安装Visual Studio 2022 Community 访问微软Visual Studio官网&#xff…

SpringBoot 如何使用 Redis 作为缓存?

SpringBoot 如何使用 Redis 作为缓存&#xff1f; 引言 在今天的互联网应用中&#xff0c;缓存是一个非常重要的概念。缓存可以减轻数据库的负担&#xff0c;提高系统的性能。Redis 是一个非常流行的内存数据库&#xff0c;它可以用作缓存&#xff0c;提供快速的读写速度和高…

【C语言初阶(1)】分支语句

文章目录 前言1. if 语句1.1 if 语法结构1.2 悬空 else1.3 “ ” 号引发的错误1.4 if 语句练习题 2. switch 语句2.1 switch 语法结构2.2 在switch语句中的 break2.3 default 子句2.4 switch 语句练习题 前言 C语言是一门结构化的程序设计语言&#xff1b; 它分为&#xff1a;…

【MySQL】不就是多表查询综合练习

前言 嗨咯大家好&#xff01;我们学习完毕了多表查询&#xff0c;今天我们就要对我们所学的成果进行测验&#xff0c;本期主要是对多表查询相关内容的练习课程。可以先试着自己敲&#xff0c;遇到不会可以查看查考代码。 目录 前言 目录 练习题 1.查询员工的姓名、年龄、职位…

生物制药厂洁净区环境监测超限的标准是多少?

对于一些生物制药企业来说&#xff0c;质量管理部门应加深对环境监测的质量认识&#xff0c;掌握环境监测的技术手段&#xff0c;定期评估环境监测程序的有效性和完整性&#xff0c;并且对环境监测数据进行趋势分析以寻找可以更好控制的区域&#xff0c;以保证企业的生产符合GM…

网络安全合规-网络安全工程师(一)

网络安全工程师的工作种类很多&#xff0c;当前这个图片说明了具体的工程师的工作种类有哪些&#xff0c;列举了一下。 互联网时代网络及科技迅速发展&#xff0c;随之而来的首要问题就是网络安全&#xff0c;因为已经出现的网络问题带来了巨大的经济损失&#xff0c;甚至各种…