vue2+element-ui批量导入方法并判断上传的文件是否为xls或xlsx

news2024/11/25 2:25:25

业务需求:

代码结构:

<el-dialog
    title="批量导入"
    :close-on-click-modal="true"
    @close="close()"
    :visible="true"
    width="35%"
    :center="true"
  >
    <div class="el-dialog-div">
      <!-- 头部区域布局 -->
      <div class="header_area">
        <div class="header_word">
          <p>专家导入</p>
        </div>
        <div class="header_list">
          <el-button
            type="primary"
            size="small"
            icon="el-icon-download"
            plain
            @click="downloadTemplate"
            >下载模板</el-button
          >
        </div>
      </div>
      <el-upload
        class="upload-demo"
        ref="upload"
        :action="uploadUrl"
        :file-list="fileList"
        :auto-upload="false"
        :headers="{ token: $cookie.get('token') }"
        :multiple="false"
        :show-file-list="true"
        :on-change="handleChange"
        :on-remove="handleRemove"
        :limit="1"
      >
        <el-button
          slot="trigger"
          size="small"
          type="primary"
          icon="el-icon-plus"
          plain
          :disabled="fileList.length>0"
          >专家文件选择
        </el-button>
      </el-upload>
    </div>
    <span slot="footer" class="dialog-footer">
      <el-button @click="close()">取消</el-button>
      <el-button type="primary" @click="dataFormSubmit()" :uploading="uploading"
        >确定</el-button
      >
    </span>
  </el-dialog>

下载模板方法:

// 下载模板
    downloadTemplate() {
      // 模板文件的下载链接
      const templateFileUrl = "/uploads/template.xlsx"; //后端给一个服务器模板链接
      // 创建一个链接元素
      const link = document.createElement("a");
      link.href = templateFileUrl;
      link.target = "_blank";
      link.download = "模板.xlsx"; // 下载的文件名
      link.style.display = "none";
      // 将链接元素添加到 DOM 中
      document.body.appendChild(link);
      // 模拟点击下载链接
      link.click();
      // 移除链接元素
      document.body.removeChild(link);
    },

提交上传方法:

1.先做类型判断 大小判断 是否上传

// 检查是否选择了文件
      if (this.fileList.length <= 0) {
        this.$message.error("请先选择要导入的文件");
        return;
      }
      // 检查文件类型是否是 Excel
      const isExcel =
        this.fileList[0].type === "application/vnd.ms-excel" ||
        this.fileList[0].type ===
          "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
      if (!isExcel) {
        this.$message.error("仅支持xls、xlsx格式的文件!");
        return;
      }
      // 检查文件大小是否符合限制
      const isSizeValid = this.fileList[0].size / 1024 / 1024 < 10;
      if (!isSizeValid) {
        this.$message.error("文件大小不能超过10MB");
        return;
      }

2.提交后端方法

this.uploading = true;
      // 创建 FormData 对象,用于将文件作为表单字段上传
      const formData = new FormData();
      formData.append("file", this.fileList[0].raw);
      // 发送文件上传请求
      this.$http({
        url: this.$http.adornUrl(
          "/professorInfo/importProfessorInfo",
          "member"
        ),
        method: "post",
        headers: { "Content-Type": "multipart/form-data" },
        data: formData,
      })
        .then(({ data }) => {
          console.log(data, "000000000");
          // 处理上传成功的逻辑
          if (data && data.code === "0") {
            // 上传成功的处理逻辑
            this.$message({
              message: `成功导入${data.data.successNum}条数据`,
              type: "success",
              duration: 2000,
              onClose: () => {
                this.$emit("refresh-data-list");
                this.close();
              },
            });
          } else {
            // 上传失败的处理逻辑
            this.$message.error(data.msg);
            // 其他逻辑处理...
          }
          this.uploading = false;
          this.$emit("refresh-data-list");
          this.close();
        })
        .catch((error) => {
          // 处理请求异常的逻辑
          this.$message.error(data.msg);
          console.error(error);
          // 其他逻辑处理...
          this.uploading = false;
        });

3.完整代码

dataFormSubmit() {
      // 检查是否选择了文件
      if (this.fileList.length <= 0) {
        this.$message.error("请先选择要导入的文件");
        return;
      }
      // 检查文件类型是否是 Excel
      const isExcel =
        this.fileList[0].type === "application/vnd.ms-excel" ||
        this.fileList[0].type ===
          "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
      if (!isExcel) {
        this.$message.error("仅支持xls、xlsx格式的文件!");
        return;
      }
      // 检查文件大小是否符合限制
      const isSizeValid = this.fileList[0].size / 1024 / 1024 < 10;
      if (!isSizeValid) {
        this.$message.error("文件大小不能超过10MB");
        return;
      }
      this.uploading = true;
      // 创建 FormData 对象,用于将文件作为表单字段上传
      const formData = new FormData();
      formData.append("file", this.fileList[0].raw);
      // 发送文件上传请求
      this.$http({
        url: this.$http.adornUrl(
          "/professorInfo/importProfessorInfo",
          "member"
        ),
        method: "post",
        headers: { "Content-Type": "multipart/form-data" },
        data: formData,
      })
        .then(({ data }) => {
          console.log(data, "000000000");
          // 处理上传成功的逻辑
          if (data && data.code === "0") {
            // 上传成功的处理逻辑
            this.$message({
              message: `成功导入${data.data.successNum}条数据`,
              type: "success",
              duration: 2000,
              onClose: () => {
                this.$emit("refresh-data-list");
                this.close();
              },
            });
          } else {
            // 上传失败的处理逻辑
            this.$message.error(data.msg);
            // 其他逻辑处理...
          }
          this.uploading = false;
          this.$emit("refresh-data-list");
          this.close();
        })
        .catch((error) => {
          // 处理请求异常的逻辑
          this.$message.error(data.msg);
          console.error(error);
          // 其他逻辑处理...
          this.uploading = false;
        });
    },

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

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

相关文章

万物互联:软件与硬件的协同之道

在当今数字化时代&#xff0c;我们身边的一切似乎都与计算机和互联网有关。从智能手机到智能家居设备&#xff0c;从自动驾驶汽车到工业生产线&#xff0c;无论我们走到哪里&#xff0c;都能看到软件和硬件的协同作用。本文将探讨这种协同作用&#xff0c;解释软件和硬件如何相…

R语言机器学习之caret包详解(二:模型的训练以及调参)

R语言机器学习之caret包详解&#xff08;二&#xff1a;模型的训练以及调参&#xff09; 前言caret包模型调优的策略、示例、以及一些小tips 前言 在之前的博客中我们详细介绍过了数据的拆分策略、各种数据处理的方法、各种交叉验证的方法&#xff0c;并且以示例介绍了R函数cre…

传统文化,运用好了,能生财!

千年以来&#xff0c;五行是中华民族文化的瑰宝&#xff0c;历代先贤智慧的结晶。五行学说是中国传统文化重要组成部分&#xff0c;是中国古代哲学思想的重要内容。古人认为&#xff0c;万物由五种相关的基本物质木、火、土、 金、水构成&#xff0c;这就是五行。 五行思想强调…

NFTScan 浏览器再升级:优质数据服务新体验来袭

当前&#xff0c;高质量的 NFT 数据服务已成为区块链用户和开发者的必需。为满足用户数据需求&#xff0c;NFTScan 主站近日进行全面升级&#xff0c;优化了数据服务板块的页面结构&#xff0c;实现更清晰简洁的布局和交互。 NFTScan 的改版充分考虑用户和开发者的数据体验&am…

【python】TCP socket服务器 Demo

目录 一、单线程服务器 二、多线程服务器 三、多线程服务器&#xff08;发送和接收分离&#xff09; 一、单线程服务器 说明&#xff1a;只能连接一个客户端 import socket,binascii# 创建一个 TCP 套接字 server_socket socket.socket(socket.AF_INET, socket.SOCK_STRE…

【C++基础】4、变量

文章目录 【 1、变量的定义 】【 2、变量的声明 】示例 【 3、左值和右值 】 变量&#xff1a;相当于是程序可操作的数据存储区的名称。在 C 中&#xff0c;有多种变量类型可用于存储不同种类的数据。C 中每个变量都有指定的类型&#xff0c;类型决定了变量存储的大小和布局&am…

文末送书!谈谈原型模式在JAVA实战开发中的应用(附源码+面试题)

作者主页&#xff1a;Designer 小郑 作者简介&#xff1a;3年JAVA全栈开发经验&#xff0c;专注JAVA技术、系统定制、远程指导&#xff0c;致力于企业数字化转型&#xff0c;CSDN博客专家&#xff0c;蓝桥云课认证讲师。 本文讲解了 Java 设计模式中的原型模式&#xff0c;并给…

python3

#安装python3 brew install python3 看到下图表示安装python3成功: #将python3 加入环境变量 export PATH$PATH:/opt/homebrew/bin/#查看python 版本 python3 --version#查看pip 版本 pip3 --version#更新python源 pip3 config set global.index-url https://pypi.tuna.tsing…

免费电商api接口,分享给你「建议收藏」

API&#xff08;应用程序编程接口&#xff09; ​ API&#xff08;Application Programming Interface&#xff0c;应用程序接口&#xff09;是一些预先定义的函数&#xff0c;或指软件系统不同组成部分衔接的约定。目的是提供应用程序与开发人员基于某软件或硬件得以访问一组…

高忆管理;三天翻倍!地产“三仙”狂飙

9月6日&#xff0c;一度全部成为“仙股”的三家闻名香港上市房企&#xff0c;融创我国、我国恒大、碧桂园大涨。其间两家已顺利摘掉“仙股”帽子。 截至发稿&#xff0c;融创我国涨20.25%&#xff0c;报1.9港元/股&#xff0c;总市值报104亿港元&#xff0c;不到三个交易日股价…

[LeetCode周赛复盘] 第 361 场周赛20230906

[LeetCode周赛复盘] 第 361 场周赛20230906 一、本周周赛总结2843. 统计对称整数的数目1. 题目描述2. 思路分析3. 代码实现 2844. 生成特殊数字的最少操作1. 题目描述2. 思路分析3. 代码实现 2845. 统计趣味子数组的数目1. 题目描述2. 思路分析3. 代码实现 2846. 边权重均等查…

提升客户体验,你只需要做到这一点

自动回复是指由特定事件或操作触发的自动响应&#xff0c;例如在即时通讯工具上接收消息&#xff0c;它用于通知发件人他们的消息已被收到。不仅可以在WhatsApp&#xff0c;Messenger等渠道上设置自动回复&#xff0c;如果您使用了像SaleSmartly&#xff08;SS客服&#xff09;…

任意文件读取及漏洞复现

文章目录 渗透测试漏洞原理任意文件读取1. 任意文件读取概述1.1 漏洞成因1.2 漏洞危害1.3 漏洞分类1.4 任意文件读取1.4.1 文件读取1.4.2 任意文件读取1.4.3 权限问题 1.5 任意文件下载1.5.1 一般情况1.5.2 PHP实现1.5.3 任意文件下载 2. 任意文件读取攻防2.1 路径过滤2.1.1 过…

无需麻烦验证,文字验证码一键通过

前言 文字验证码&#xff0c;简单易用&#xff0c;安全可靠&#xff01;不需要麻烦的图形识别。这种验证方式不仅方便快捷&#xff0c;而且能有效防止恶意攻击和机器人访问。无需担心复杂操作&#xff0c;只需几秒钟就能完成验证过程。保护您的个人信息和数据安全&#xff0c;…

PG 的状态机和peering过程

首先来解释下什么是pg peering过程&#xff1f; 当最初建立PG之后&#xff0c;那么需要同步这个pg上所有osd中的pg状态。在这个同步状态的过程叫做peering过程。同样当启动osd的时候&#xff0c;这个osd上所有的pg都要进行peering过程&#xff0c;同步pg的状态。peering过程结…

【K 均值聚类】02/5:简介

一、说明 k-mean算法是一种聚类算法&#xff0c;它的主要思想是基于数据点之间的距离进行聚类。K-means聚类是一种无监督的机器学习算法。让我们再解释一下这句话。聚类分析的目标是将数据划分为同类聚类。每个聚类中的点彼此之间比其他聚类中的点更相似。 无监督机器学习是在没…

k8s集群中集群方式安装nacos

1、前提条件 一个k8s集群&#xff0c;其中有三个master 节点&#xff0c;这三个节点的标签名称为etcd 三个master节点的ip 分别为&#xff1a;192.165.187.170 、192.165.187.171、192.165.187.172一个mysql 数据库&#xff0c; 数据库的ip 为&#xff1a;192.165.187.180 用户…

Java虚拟机整型数加载指令学习

JVM中 int 类型数值&#xff0c;根据 取值范围将 入栈的 字节码指令 就分为4类&#xff1a; 取值 -1~5 采用 iconst 指令&#xff1b; 取值 -128~127 采用 bipush 指令&#xff1b; 取值 -32768~32767 采用 sipush指令&#xff1b; 取值 -2147483648~2147483647 采用 ldc 指令。…

pyppeteer模块常用方法

目录 await page.方法 设置相关 setUserAgent(str) setCookie&#xff08;cookie1, cookie2.......&#xff09; 页面相关 goto(url) reload() goBack()/goForward() 执行js evaluate(js_str) 截图 screenshot(dict) 保存pdf pdf(dict) 获取内容 content() co…

Fragment的创建分析

之前的文章讨论了Fragment的销毁流程&#xff0c;初始状态为resume&#xff0c;然后经历pause -> stop -> destroyView -> destroy -> detach这么几个流程&#xff08;本篇文章基于Support27.1.1来分析的&#xff09;。清楚了Fragment的销毁&#xff0c;那也来看看…