Vue 中实现 excel文件上传功能

2023-11-18

Duang,最近搭建了一个自己的博客小破站,欢迎各位小伙伴来访吖:

ares-coder-blog-portalhttps://www.ares-stack.cn/blog_service/#/game

场景: 上传excel表,并将excel表中的数据构建成实体

                    <div class="pull-right" v-if="doc">
                        <el-upload
                             class="upload-demo"
                             ref="upload"
                             action="doUpload"
                             :limit="1"
                             :file-list="fileList"
                             :before-upload="beforeUpload">
                             <el-button slot="trigger" size="small" type="primary" :loading="requested" style="margin-right: 20px">上传excel</el-button>
                            <!-- <div slot="tip" class="el-upload__tip">只能上传excel文件,且不超过5MB</div>-->
                            <!-- <div slot="tip" class="el-upload-list__item-name">{{fileName}}</div>-->
                        </el-upload> 
                        <!--<span slot="footer" class="dialog-footer">-->
                        <!-- <el-button @click="visible = false">取消</el-button>-->
                        <!-- <el-button type="primary" @click="submitUpload()">确定</el-button>-->
                        <!--</span>-->
                    </div>
            beforeUpload(file){
                // console.log(file,'文件');
                this.files = file;
                const extension = file.name.split('.')[1] === 'xls'
                const extension2 = file.name.split('.')[1] === 'xlsx'
                const isLt5M = file.size / 1024 / 1024 < 5
                if (!extension && !extension2) {
                    this.$message.warning('上传模板只能是 xls、xlsx格式!')
                    return
                }
                if (!isLt5M) {
                    this.$message.warning('上传模板大小不能超过 5MB!')
                    return
                }
                this.fileName = file.name;
                setTimeout(() => {
                    this.submitUpload();
                },500);
                return false; // 返回false不会自动上传
            },   
         
            // 上传excel
            submitUpload() {
                console.log('上传'+this.files.name)
                if(this.fileName == ""){
                    this.$message.warning('请选择要上传的文件!')
                    return false
                }
                let fileFormData = new FormData();
                fileFormData.append("code", "t_pathology_info_excel");
                fileFormData.append("description", "excel上传测试");
                //filename是键,file是值,就是要传的文件,test是要传的文件名
                fileFormData.append('files', this.files, this.fileName);
                let requestConfig = {
                    headers: {
                        'Content-Type': 'multipart/form-data'
                    },
                }
                // 执行上传excel
                let id = '';
                this.http.postJson('/sys/file/upload', fileFormData, requestConfig).then(resp => {
                    if (resp.data.status != 200) {
                        this.$message.error("excel上传失败,请重新上传");
                    } else {
                        id = resp.data.result[0].attachmentId;
                    }
                }).catch((e) => {
                    // console.log(e);
                    this.$message.error("excel上传失败,请重新上传");
                }).finally(() => {
                    if(id) {
                        // 触发生成订单实体数据
                        this.generateBill(id);
                    }
                });
            }

            // 构建实体
            generateBill(attachmentId) {
                this.http.postJson('/admin/myTest/leadingIn/' + attachmentId + '/type_one').then(resp => {
                    if (resp.data.status != 200) {
                        // this.$message.error("excel上传失败,请重新上传");
                    } else {
                        this.$message.success("excel上传成功!");
                        this.query();
                    }
                }).catch((e) => {
                    // console.log(e);
                    // this.$message.error("excel上传失败,请重新上传");
                }).finally(() => {

                });
            }


 在这里遇到了死锁:Lock wait timeout exceeded; try restarting transaction

我在将excel表中的数据构建成实体的方法中加入了:@Transactional(rollbackOn = RuntimeException.class) 注解

手动抛异常throw new RuntimeException(); 正常应该是出现异常自动回滚,但是这里出现是事务锁,将数据库的附件表锁死了

猜想原因:一开始上传的附件,没有绑定关联id,而是选择了在构建实体方法中:先绑定关联,然后根据关联

取出excel表。由于上传附件的方法是异步执行的,报了异常事务回滚,出现事务锁将数据库的附件表锁死了。

解决办法:

1,数据库对应的表需要解锁,解决:Lock wait timeout exceeded try restarting transaction__夜渐凉的博客-CSDN博客

2,在上传附件的方法中,同时将关联id绑定

    /**
     * 文件上传&绑定relId    excel上传诊单数据
     *
     * @param userId      当前登录人Id
     * @param username    当前登陆用户名称
     * @param code        上传编码标识code
     * @param des         描述
     * @param files       附件
     */
    @PostMapping(value = "/sys/file/upload4excelImport")
    public Message upload4excelImport(@CurrentUser Long userId, @CurrentUser String username, @CurrentUser("relId") Long relId,
                          @RequestParam(name = "code") String code, @RequestParam(name = "des") String des,
                          @RequestParam MultipartFile[] files) {

        // 第一步,generateAttachment本地生成附件方法
        
        // 第二步,绑定附件表关联id
      
        return Message.success();
    }

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue 中实现 excel文件上传功能 的相关文章

随机推荐

  • ARm 移植最新版QT5.12

    转载 https blog csdn net weixin 37771089 article details 84989447 一 准备 ubuntu 12 04 源码 http download qt io archive qt 5 12
  • IDEA使用maven进行多模块项目打包并梳理正确的打包顺序

    maven多模块打包一般相互之间都有互相的依赖关系 如果没有按照正确的依赖关系顺序进行打包就会报错 例如有三个模块web service common 其中web依赖service web和service都依赖common 那么正确的打包顺
  • hsql获取数组中最后一个值的写法

    一 问题抛出 在数据分析中我们有时候会遇到需要取出数组中最后一个值的方法 1 表xxx数据如下图所示 2 现在需要取出字符串最后的 321 和 987 二 方案探讨 1 反转字符串后 使用切割函数切割获取第一个值 然后再反转一下 代码如下
  • Spring Boot starter 启动流程(无废话版)

    如果无产阶级不能发出自己的声音 他们就会被社会遗忘 一 pom xml文件 1 父依赖 其中它主要是依赖一个父项目 主要是管理项目的资源过滤及插件
  • Superset整合keycloak系统

    本篇主要介绍superset如何整合单点登陆系统keycloak 现在网上的博客大部分都是失效了 这里我相当于更新一下 避免大家再走弯路 一 环境配置 Macos keycloak 18 0 0 superset 2 1 0 keycloa
  • PMSM学习笔记1——永磁同步电机的工作原理与数学模型

    文章目录 一 PMSM工作原理 1 同步电机工作原理 来源 电机学 李发海 2 永磁同步电机数学模型及坐标变换 来源 现代电机控制技术 王成元 2 1旋转磁场 2 2三相PMSM的基本数学模型 2 3三相PMSM的坐标变换 2 3 1 Cl
  • 【Unity 3D】学习笔记 - 粒子系统制作

    这次的任务是制作一个简单的粒子系统 并用代码控制使之在不同的场景下呈现出不同的效果 我想要制作出颜色渐变的烟花效果 关于粒子系统 可以参考 Unity 3D 学习笔记 粒子系统初探 粒子系统基本设置如下 其中Simulation Rotat
  • 学生用计算机怎么恢复出厂设置,电脑怎么恢复出厂设置

    关机或重启时 按住电脑键盘的 Del 键进入BIOS 使用Enter回车键选中 Load Optimized Defaults 选项 使用方向键选中 Y 确认 点击 Save Exit Step 或者按 F10 退出即可 以下是详细介绍 电
  • Go语言实现Onvif客户端:2、获取设备信息

    Go语言实现Onvif客户端 2 获取设备信息 文章目录 Go语言实现Onvif客户端 2 获取设备信息 1 思路 2 代码 1 思路 搜索设备 获取设备能力 通过设备能力的设备接口读取设备信息 我们上节说了 主要是通过设备信息中的内容来区
  • 线性代数 【基础1】

    文章目录 行列式 方阵的行列式公式 矩阵 矩阵的逆 矩阵的秩 伴随矩阵 初等变换与初等矩阵 分块矩阵 向量 正交矩阵 正交化 线性表示 线性无关与线性相关 极大无关组与向量组的秩 线性方程组 解的性质与判定 齐次线性方程组 非齐次线性方程组
  • 大型网站在架构上应当考虑哪些问题?

    分层 分层是处理任何复杂系统最常见的手段之一 将系统横向切分成若干个层面 每个层面只承担单一的职责 然后通过下层为上层提供的基础设施和服务以及上层对下层的调用来形成一个完整的复杂的系统 计算机网络的开放系统互联参考模型 OSI RM 和In
  • Java8 CompletableFuture处理多个异步任务

    CompletableFuture Java5引入了Future和 FutureTask 用于异步处理 Future可以通过get 方法获取异步的返回值 在Java8引入了CompletableFuture CompletableFutur
  • 设置GPU及显存大小

    20210128 引言 之前搜索过设置GPU和显存大小的方式 但是升级了新的版本的keras以及tensorflow 导致之前的代码失效了 这里记录一下 本质上 就是版本更换的原因 很多api可能被取消 或者改了别的 原始代码 import
  • 计算机网络ip尽最大努力交付,计算机网络知识(IP、TCP、UDP)--持续更新

    互联网的两个重要的基本特点 连通性和共享 计算机网络由若干结点和连接这些结点的链路组成 互联网的组成 边缘部分 核心部分 网络边缘的端系统之间的通信可分为两大类 客户 服务器方式 C S方式 和对等方式 P2P方式 互联网的核心部分 许多网
  • 原始传奇手游服务器不显示,原始传奇手游为什么进不去 无法登录游戏解决方法...

    近日有一款由古力娜扎代言的手游 原始传奇 上线了 不少玩家也很想体验一番 可是却发现原始传奇手游进不去 不知道是为什么 下面悠小悠就为大家详细介绍下无法登录游戏的原因和解决方法 一起探讨下吧 原始传奇手游进不去原因及解决方法 1 如果是登录
  • tomcat没有日志输出--解决办法

    程序没有问题 只是控制台信息卡 感觉像程序休眠了一样 然后在控制台点backspace或是enter 程序恢复正常 控制台日志正常输出 静态文件访问可以 解决办法 转载于 https blog 51cto com 13693838 2398
  • BIND9的架构与机制笔记1

    BIND9采用的是事件驱动的机制来工作 而事件的源头则是IO IO在linux使用的EPOLL的边缘触发模式 本篇说的是epoll BIND9如果创建了watcher线程 宏USE WATCHER THREAD控制 这里就讨论有线程的情况
  • Redis第五讲 Redis内存淘汰策略之LRU与LFU算法详细介绍

    前面介绍了Redis的一些内存淘汰策略 一般比较常用的两种淘汰策略为LRU LFU 而且他们的算法考察的也比较多 LRU 最近最久未使用 标准LRU算法是这样的 它把数据存放在链表中按照 最近访问 的顺序排列 当某个key被访问时就将此ke
  • 机器学习——无监督学习

    机器学习的分类 一般分为下面几种类别 监督学习 supervised Learning 无监督学习 Unsupervised Learning 强化学习 Reinforcement Learning 增强学习 半监督学习 Semi supe
  • Vue 中实现 excel文件上传功能

    Duang 最近搭建了一个自己的博客小破站 欢迎各位小伙伴来访吖 ares coder blog portalhttps www ares stack cn blog service game 场景 上传excel表 并将excel表中的数