Vue + SpringBoot:el-upload组件单文件、多文件上传实战解析

文章目录

  • 单文件上传
    • 后端
    • 前端
  • 多文件上传
    • 后端
    • 前端

单文件上传

后端

@PostMapping("/uploadDxfFile")
public R uploadDxfFile(@RequestParam(value = "file", required = true) MultipartFile multipartFile) throws Exception {// 文件校验工作if (multipartFile.isEmpty() || multipartFile.getSize() > 52428800) {R.fail(BaseErrorCode.CLIENT_ERROR.code(), "上传文件不能为空,且不能大于50MB");}// 获取文件名String originalFilename = multipartFile.getOriginalFilename();if (!(originalFilename.endsWith(".dxf"))) {return R.fail(BaseErrorCode.CLIENT_ERROR.code(), "只能导入dxf文件");}// 获取文件输入流InputStream inputStream = multipartFile.getInputStream();return R.ok(resultMap);
}

前端

在这里插入图片描述
【组件】

<el-upload class="upload-demo" :action="uploadDxfAction" :data="uploadPostData":on-preview="handlePreview":on-remove="handleRemove" :before-remove="beforeRemove" :on-success="handleSuccess":headers="headers" :limit="1" :on-exceed="handleExceed" :file-list="fileList"style=" width: 100%;"><el-button size="mini" type="primary">上传dxf文件</el-button><div slot="tip" class="el-upload__tip" style="color: red;">只能上传.dxf文件,且不超过50MB</div>
</el-upload>
  • :action="uploadDxfAction":定义文件要上传到的后台接口地址
  • :limit="1":限制只能上传一个文件
  • :on-success="handleSuccess":定义文件上传成功时执行的方法
  • :headers="headers":如果后台做了权限验证,需要在这里定义文件上传时的请求头’

【变量定义】

 data() {return {// tokentoken: '',// 请求头headers: {},passengerFlowImportDialogVisible: false,// 文件上传地址(后端接受文件的地址)uploadDxfAction: process.env.VUE_APP_BASE_API + "/packing/item/uploadDxfFile",// 文件列表fileList: [],// 导入文件的同时向后台提交数据uploadPostData: {},/// 批量上传物品uploadItemList: [],// 设置所导入零件参数的时候,点击到的行selectRow: {},};},

【方法定义】

handleSuccess(res) {console.log("文件上传成功");console.log("res:" + JSON.stringify(res.data.code));// 这里可以定义一些文件上传成功之后的操作,例如成功提示、文件信息解析……
},handleRemove(file, fileList) {console.log(file, fileList);
},
handlePreview(file) {console.log(file);
},
handleExceed(files, fileList) {this.$message.warning(`只能选择 1 个文件,如果想要更换文件,请删除原有文件`);
},
beforeRemove(file, fileList) {return this.$confirm(`确定移除 ${file.name}`);
},
// 清除已经上传的文件
clearFileList() {this.fileList = [];
},
handleChange(file, fileList) {this.fileList = fileList;
},

多文件上传

后端

/*** 导入一组dxf文件并完成解析** @param multipartFiles 文件列表* @param paramMap       额外参数映射* @return 返回结果* @throws Exception 异常*/
@PreAuthorize("@ss.hasPermi('packing:item:uploadDxfFiles')")
@Log(title = "上传dxf文件组", businessType = BusinessType.IMPORT)
@PostMapping("/uploadBatchDxfFile")
public R uploadBatchDxfFile(@RequestParam(value = "files", required = true) List<MultipartFile> multipartFiles, @RequestParam(required = false) Map paramMap) throws Exception {if (multipartFiles.isEmpty()) {return R.fail(BaseErrorCode.CLIENT_ERROR.code(), "上传文件组不能为空");}// 解析出每个文件List<Item> items = multipartFiles.stream().filter(file -> !file.isEmpty() && file.getSize() <= 52428800 && file.getOriginalFilename().endsWith(".dxf")).map(file -> {try {// 处理文件} catch (Exception e) {throw new RuntimeException("解析文件出错:" + file.getOriginalFilename(), e);}}).collect(Collectors.toList());if (items.isEmpty()) {return R.fail(BaseErrorCode.CLIENT_ERROR.code(), "没有有效的dxf文件被上传");}HashMap<String, Object> resultMap = new HashMap<>();resultMap.put("items", items);return R.ok(resultMap);
}

前端

在这里插入图片描述

<el-upload ref="batchUpload" class="upload-demo" :action="uploadBatchDxfAction" :data="uploadPostData":on-preview="handlePreview":on-remove="handleRemove" :before-remove="beforeRemove" :on-success="handleBatchSuccess":headers="headers" multiple :on-exceed="handleExceed" :file-list="fileList":on-change="handleChange":auto-upload="false"style="width: 100%;"><el-button slot="trigger" size="small" type="primary">选取文件</el-button><el-button style="margin-left: 10px;" size="small" type="success" @click="submitBatchUpload">上传解析</el-button><div slot="tip" class="el-upload__tip" style="color: red;">只能上传.dxf文件,每个文件不超过50MB</div>
</el-upload>

首先需要关闭自动上传:auto-upload="false",不然所选择的文件会被一个一个上传,我们希望同时将这些文件上传到服务器进行处理。
变量定义、方法定义和上面类似,这里只展示不一样的。在选取完文件之后,并不会自动上传到服务器,需要点击按钮手动上传,如果直接调用el-upload的提交方法,还是会一个一个文件的上传,因此我们需要自己写一个请求方法,我的请求方法如下:

import axios from 'axios'
// 批量上传文件
export function uploadBatchDxfFile(fileList, token) {const formData = new FormData();// 遍历文件列表,将每个文件添加到formData中fileList.forEach((file, index) => {// 你可以选择使用一个通用的键名(如'files'),并让后端处理多个同名的键值// 或者为每个文件使用唯一的键名,这取决于你的后端需求formData.append(`files`, file.raw, file.name); // 这里的`files`是后端期望的字段名});return axios.post(process.env.VUE_APP_BASE_API + '/packing/item/uploadBatchDxfFile', formData, {headers: {'Content-Type': 'multipart/form-data',Authorization: `Bearer ${token}`}}).then(response => {// 处理成功的响应return response.data;}).catch(error => {// 处理错误情况throw error;});
}

注意需要给vue项目引入axios,才能使用上面的请求方法。最终在页面中给按钮触发事件绑定下面的方法即可

/*** 将选中的文件批量上传*/
submitBatchUpload() {if (this.fileList.length === 0) {this.$modal.msgWarning("请先选择文件再上传解析");return;}uploadBatchDxfFile(this.fileList, this.token).then(res => {})
},

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

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

相关文章

redis 如何使用 scan, go语言

建议用方案乙 文章目录 场景方案方案甲方案乙 拓展 场景 redis 中存在大量 key。 其中有一部分是用户登陆的 session_id&#xff0c; 结构是 &#xff1a; session_id:1session_id:2session_id:3需求&#xff1a; 有多少用户在线 方案 方案甲 keys session_id:*这种方式简…

Linux运维:MySQL备份,物理冷备份,热备,完备+二进制日志

备份类型 完全备份、增量备份、差异备份 完全备份&#xff1a;整个数据集都备份 增量备份&#xff1a;仅备份最近一次完全备份或增量备份&#xff08;如果存在增量&#xff09;以来变化的数据&#xff0c;备份较快&#xff0c;还原复杂。 差异备份&#xff1a;对比前一次备…

《Windows API每日一练》8.3 scrollbar控件

在第三章SYSMETS2.C实例中&#xff0c;我们是通过CreateWindow函数创建窗口的参数窗口样式中添加垂直或水平滚动条。本节我们将讲述作为子窗口控件的滚动条。 本节必须掌握的知识点&#xff1a; 滚动条类 滚动条控件和着色 8.3.1 滚动条类 ■窗口滚动条与滚动条控件的异同 …

纯javascript实现图片批量压缩打包zip下载后端ThinkPHP多国语言切换国际站

最近在做一个多国语言的工具站&#xff0c;需要实现多国语言切换&#xff0c;说到多国语言站&#xff0c;肯定是有2种方式&#xff0c;第一是子域名&#xff0c;第二就是子目录。根据自己的需要来确定。 后台配置如下&#xff1a; 前台显示&#xff1a; 前端纯javascript实现…

人工智能开发中的数据隐私

人工智能开发中的数据隐私对于建立用户信任和遵守严格法规至关重要。保护敏感信息可确保合乎道德的人工智能使用并防止有害的数据泄露。 为什么在人工智能开发中优先考虑数据隐私至关重要 人工智能的迅猛发展开启了一个前所未有的技术进步时代&#xff0c;彻底改变了各行各业&…

Python创建MySQL数据库

一、使用Docker部署本地MySQL数据库 docker run --restartalways -p 3307:3306 --name mysql -e MYSOL_ROOT_PASSWORDlms123456 -d mysql:8.0.25 参数解析: 用户名:root 密码:lms123456 端口:3307 二、在Pycharm开发工具中配置连接MySQL数据库 三、安装zdppy_mysql pip inst…

全新UI自助图文打印系统小程序源码 PHP后端 附教程

最新自助图文打印系统和证件照云打印小程序源码PHP后端&#xff0c;为用户用户自助打印的服务&#xff0c;包括但不限于文档、图片、表格等多种格式的文件。此外&#xff0c;它们还提供了诸如美颜、换装、文档打印等功能&#xff0c;以及后台管理系统&#xff0c;方便管理员对打…

SpringBoot之内容协商

现象演示 假设有一个需求是根据终端的不同&#xff0c;返回不同形式的数据&#xff0c;比如 PC 端需要以 HTML 格式返回数据&#xff0c;APP、小程序端需要以 JSON 格式返回数据。这时我们是 coding 几个相似的接口&#xff1f;还是在一个接口里面做复杂判断处理&#xff1f;两…

步进电机改伺服电机

步进电机&#xff1a; 42&#xff1a;轴径5mm 57&#xff1a;轴径8mm 86&#xff1a;轴径14mm 【86CME120闭环】// 12牛米 伺服电机&#xff1a; 40&#xff1a; 60&#xff1a; 80&#xff1a; 86&#xff1a; ECMA——C 1 0910 R S 4.25A 轴径…

树状数组实现 查找逆序对

题意&#xff1a; 输入一个整数n。 接下来输入一行n个整数 。 1< < n ,且每个数字只会出现一次 题解&#xff1a; 按每个数字的大小存入树状数组 #include<bits/stdc.h> using namespace std; #define ll long long const int N10000; int arr[N]; ll a[N];…

Ros2中goal_handle状态SUCCEED及ACCEPTED在rclpy中的死循环

动作通信开发中&#xff0c;我使用rclpy编写代码&#xff0c;进行feedback等操作&#xff0c;前期实现的较为顺利&#xff0c;但所有逻辑均编写完后&#xff0c;却无法将goal_handle提交为succeed状态&#xff0c;以下是我的部分代码&#xff1a; self.server ActionServer(se…

利用Redis bitmap 实现签到案例

数据库实现 设计签到功能对应的数据库表 CREATE TABLE sign_record (id bigint NOT NULL AUTO_INCREMENT COMMENT 主键,user_id bigint NOT NULL COMMENT 用户id,year year NOT NULL COMMENT 签到年份,month tinyint NOT NULL COMMENT 签到月份,date date NOT NULL COMMENT 签…

GDP播放器 驱动视频播放器 PHP 系统源码 v4.4.3

最重要的是我们自己开发了源代码&#xff0c;因此无论您在使用此工具时遇到什么问题&#xff0c;我们都会快速解决。这个版本演示 分别支持PHP7.4/8.1/8.2三个版本 演示地址

8、Python中的字符串:字符串的基本操作及再论对象是否可变

引言 基于Python系列前面的几篇文章中&#xff0c;应该已经在脑海中对Python中的核心理念&#xff0c;有了一些认知&#xff0c;由于比较关键&#xff0c;这里再来回顾一下&#xff1a; 1、Python中一切皆对象2、对象分为可变对象和不可变对象3、区分重新赋值操作&#xff0c…

Dos(命令符窗口)命令

目录 1. 常用Windows组合键 2. 常用DOS命令 3. 复制操作 4. 当前路径 5. 查看电脑ip地址 6. 切换盘符: 7. 目录 8. 自动补齐 8. 进入某路径&#xff1a;cd 路径 9. 直接进入某个位置 10. 新建文件 11. 查看文件内容 12. 关机 13. 强行终止命令的执行&#xff1a;C…

java基于ssm+vue 旅游信息资源平台

1前台首页功能模块 旅游资源网站 &#xff0c;在系统首页可以查看首页、景点信息、酒店信息、客房信息、交流论坛、红色文化、个人中心、后台管理、客服等内容&#xff0c;如图1所示。 图1系统功能界面图 用户登录、用户注册&#xff0c;在注册页面可以填写用户名、密码、姓名…

如何第一次从零上传项目到GitLab

嗨&#xff0c;我是兰若&#xff0c;今天想给大家说下&#xff0c;如何上传一个完整的项目到与LDAP集成的GitLab&#xff0c;也就是说这个项目之前是不在git上面的&#xff0c;这是第一次上传&#xff0c;这样上传上去之后&#xff0c;其他小伙伴就可以根据你这个项目的git地址…

Maven 分模块设计与开发 继承

介绍 在 Maven 中进行分模块设计&#xff08;multi-module project&#xff09;&#xff0c;可以帮助将一个大型项目分解为更小、更易管理的模块。这种设计方式有助于提高项目的可维护性、复用性和团队协作效率。 继承关系 目录结构 引入父Maven 父坐标 在子项目中引入父亲…

什么是 DDoS 攻击及如何防护DDOS攻击

自进入互联网时代&#xff0c;网络安全问题就一直困扰着用户&#xff0c;尤其是DDOS攻击&#xff0c;一直威胁着用户的业务安全。而高防IP被广泛用于增强网络防护能力。今天我们就来了解下关于DDOS攻击&#xff0c;以及可以防护DDOS攻击的高防IP该如何正确选择使用。 一、什么是…

Windows Server 2016 搭建 网络负载平衡 服务

网络负载平衡功能的安装 添加角色 默认不动————功能 勾选上 < 网络负载平衡 > 在工具中————打开 < 网络负载平衡管理器 > 网络负载平衡群集创建 注意 : 提前 将两台 web 站点服务器 都安装好 < 网络负载平衡功能 > 右键 选择 ————新建群集 ——…