upload 文件自动上传写法,前后端 下载流文件流

<el-uploadv-model:file-list="fileList":action="app.api+'/student/student/import'":headers="{//   'Content-Type': 'multipart/form-data;boundary=----split-boundary', 此处切记不要加,否则会造成后端报错  Required request part 'file' is not present 'token':token}"name="file"//此处默认为fileclass="upload-demo"@on-success="handleSuccess":on-error="handleAvatarSuccess":limit="3":on-progress="beforeAvatarUpload">
<!--:auto-upload="false"--><!--          :http-request="replaceRes"--><span v-if="jinDu"><el-progress style="width: 245px; height: 19px" :text-inside="true" :stroke-width="20":percentage="percentage"/></span><span v-if="isUpload" style="color: #59c2c7;cursor:pointer;"@click="uploadChangeValue">导入学生学籍信息</span><template #tip><span style="color: #ff8282; margin-left: 20px">{{ importText }}</span></template></el-upload>
<script lang="ts" setup>//此处后端穿了一个流给前端,所以需要解析一下,然后赋值给一个按钮,在点击时候才下载!!!
const handleSuccess = (response: any) => {console.log(response)if (Object.values(response.headers)[0] == 'application/vnd.ms-excel;charset=UTF-8') {const url = window.URL.createObjectURL(new Blob([response.data]));// 创建a标签,并隐藏a标签let link = document.createElement('a')link.style.display = 'none'// a标签的href属性指定下载链接link.href = url//setAttribute() 方法添加指定的属性,并为其赋指定的值// 后缀格式.csv/.xsls要和需要和后端返回格式相同,这里以.csv为例link.setAttribute('download', '文件名称.xlsx')document.body.appendChild(link)link.click()document.body.removeChild(link)}
};//此处用于实时监听进度条进度
const beforeAvatarUpload = (event: any) => {let loadProgress = Math.floor(event.percent); //这就是当前上传的进度//可以进行其他逻辑percentage.value = loadProgress;importText.value = "学籍信息导入中……";if (percentage.value == 100) {importText.value = "学籍导入成功!"}
};
</script>
    @PostMapping("import")@ApiOperation("导入")@RequiresPermissions("student:student:import")@ApiImplicitParam(name = "file", value = "文件", paramType = "query", dataType = "file")public void importExcel(@RequestParam("file") MultipartFile file, HttpServletResponse response) throws Exception {UserDetail userDetail = SecurityUser.getUser();//保存所有的表单信息、如果表达有错误、将返回给客户端if (userWithErrorListInMap == null) {userWithErrorListInMap = new HashMap<>();}//每次都清空数据userWithErrorListInMap.put(userDetail.getId(), new ArrayList<>());ZsRef<Boolean> hasError = new ZsRef<>();new ExcelServiceListener<StudentExcel, StudentEntity>(studentService, file.getInputStream()) {private List<RegionEntity> regionList;/*** 地区编码 去掉末尾的数字0, 用于判断权限*/private String userRegionCodeForPermission;private SchoolEntity schoolForPermission;@Overridepublic void invoke(StudentExcel data, AnalysisContext context) {if (regionList == null) {regionList = regionService.selectList(new HashMap<>());}if (userDetail.getRegionCode() != null) {//去掉地区编码后面的0userRegionCodeForPermission = userDetail.getRegionCode().replaceAll("0+?$", "");}if (userDetail.getSchoolCode() != null) {schoolForPermission = schoolService.selectByParams("schoolCode", userDetail.getSchoolCode());}// 校验姓名if (data.getName() == null) {hasError.value = true;data.setName(data.getName() + "##名字不能为空, 长度最多四汉字");}// 校验性别if (data.getGender() == 2) {hasError.value = true;data.setGenderStr(data.getGenderStr() + "##性别只能是(男、女)中的一个");}// 校验身份证号if (isEmpty(data.getIdCard()) || data.getIdCard().length() != 18) {hasError.value = true;data.setName(data.getName() + "##身份证长度18位");}if (isEmpty(data.getNation())) {hasError.value = true;data.setNation(data.getNation() + "##民族不能为空");}// ************************ 校验地区 *********************************// 判断地区表中是否包含含这一项RegionEntity region1 = null, region2 = null;for (RegionEntity item : regionList) {if (data.getRegion1() != null && data.getRegion1().contains(item.getName())) {region1 = item;}if (data.getRegion2() != null && data.getRegion2().contains(item.getName())) {region2 = item;}}// RegionEntity region = regionList.stream().filter(r -> r.getName().contains(data.getRegion())).findFirst().orElse(null);if (region1 == null) {hasError.value = true;data.setRegion1(data.getRegion1() + "##城市不存在");}if (region2 == null) {if (data.getRegion1().contains("济源")) {//济源没有区县} else {hasError.value = true;data.setRegion2(data.getRegion2() + "##区县不存在");}}if (region1 != null && region2 != null) {data.setRegionCode(region2.getCode());//判断地区和学校 是否具备权限if (isNotEmpty(userDetail.getRegionCode())) {if (String.valueOf(data.getRegionCode()).startsWith(userRegionCodeForPermission)) {//具备权限} else {hasError.value = true;data.setRegion2(data.getRegion2() + "##不具备该地区的权限");}}}//判断是否具备该学校的权限if (isNotEmpty(userDetail.getSchoolCode())) {if (isEquals(schoolForPermission.getName(), data.getSchoolName())) {//具备权限} else {hasError.value = true;data.setSchoolName(data.getSchoolName() + "##不具备该学校的权限");}} else {//不需要判断学校权限}if (isEquals(hasError.value, true)) {userWithErrorListInMap.get(userDetail.getId()).add(data);} else {//没有错误的才添加super.list.add(data);}}@Overridepublic void doAfterAllAnalysed(AnalysisContext context) {if (isEquals(hasError.value, true)) {//  有错误, 不入库} else {studentService.saveStudentWidthSchoolAndClass(super.list);}}}.start(2);if (Objects.equals(hasError.value, true)) {String errorFileName = file.getOriginalFilename().replace(".xlsx", "错误提示.xlsx");export(response, errorFileName, userWithErrorListInMap.get(userDetail.getId()));} else {PrintWriter pw = response.getWriter();//逻辑删除导入学籍时学籍不存在的学校班级(当前学期)schoolService.deleteBySchoolCode();gradeClassService.deleteByClassCode();//恢复导入学籍时学籍存在但逻辑删除的学校班级(当前学期)schoolService.updateBySchoolCode();gradeClassService.updateByClassCode();pw.write(ZsJson.toJson(new Result<>()));pw.close();}System.out.println("excel解析完成");}

下载一个后端返回的流文件

注意跨域问题

后端解决跨域问题

const downLoadExport=()=>{axios({method: 'post',url: baseUrl+"/electric/electricassets/download/assets",headers: {"Content-Type": "application/json;charset=UTF-8","token":getToken()},responseType: 'blob'}).then(response => {if (Object.values(response.headers)[0]=='application/vnd.ms-excel;charset=UTF-8'){const url = window.URL.createObjectURL(new Blob([response.data]));// 创建a标签,并隐藏a标签let link = document.createElement('a')link.style.display = 'none'// a标签的href属性指定下载链接link.href = url//setAttribute() 方法添加指定的属性,并为其赋指定的值// 后缀格式.csv/.xsls要和需要和后端返回格式相同,这里以.csv为例link.setAttribute('download',   '文件名称.xlsx')document.body.appendChild(link)link.click()document.body.removeChild(link)}})
}

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

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

相关文章

HashMap的使用,以及内置方法

HashMap 是 Java 中常用的集合类之一&#xff0c;它实现了 Map 接口&#xff0c;基于哈希表实现。HashMap 允许存储键值对&#xff0c;其中键和值都可以是任意类型的对象。 1. 创建 HashMap import java.util.HashMap; import java.util.Map;public class HashMapExample {pu…

C语言--输入10个数字,要求输出其中值最大的元素和该数字是第几个数

今天小编带大家了解一下什么是“打擂台”算法。 一.思路分析 可以定义一个数组arr&#xff0c;长度为10&#xff0c;用来存放10个数字&#xff0c;设计一个函数Max&#xff0c;用来求两个数中的较大值&#xff0c; 定义一个临时变量tmparr[0],保存临时最大的值&#xff0c;下标…

Hive 常用存储、压缩格式

1. Hive常用的存储格式 TEXTFI textfile为默认存储格式 存储方式&#xff1a;行存储 磁盘开销大 数据解析开销大 压缩的text文件 hive 无法进行合拆分 SEQUENCEFILE sequencefile二进制文件&#xff0c;以<key,value>的形式序列到文件中 存储方式&#xff1a;行存储 可…

洛谷 NOIP 2023 模拟赛 P9836 种树

洛谷 NOIP 2023 模拟赛 P9836 种树 文章目录 洛谷 NOIP 2023 模拟赛 P9836 种树题目大意思路code 题目大意 路边有 n n n 棵树&#xff0c;每棵树的 高度 均为正整数&#xff0c;记作 p 1 , p 2 … p n p_1, p_2 \dots p_n p1​,p2​…pn​。 定义一棵树的 宽度 为它高度的…

vagrant安装k8s集群

目录 概述前期准备安装virtualbox安装vagrant安装gitbash 集群架构集群安装集群初始化集群测试 概述 使用vagrant、virtualbox创建。 前期准备 安装virtualbox 访问官网安装&#xff0c;版本7.0.10 安装vagrant 访问官网安装&#xff0c;版本2.3.7 安装gitbash 访问官网…

Gogs安装和部署教程-centos上

0、什么是 Gogs? Gogs 是一款极易搭建的自助 Git 服务。 Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自助 Git 服务。使用 Go 语言开发使得 Gogs 能够通过独立的二进制分发&#xff0c;并且支持 Go 语言支持的 所有平台&#xff0c;包括 Linux、Mac OS X、Windo…

记录一次某某虚拟机的逆向

导语 学了一段时间的XPosed&#xff0c;发现XPosed真的好强&#xff0c;只要技术强&#xff0c;什么操作都能实现... 这次主要记录一下我对这款应用的逆向思路 apk检查 使用MT管理器检查apk的加壳情况 发现是某数字的免费版本 直接使用frida-dexdump 脱下来后备用 应用分…

Maven内网开发使用离线仓库

Maven内网开发使用离线仓库 离线或者内网环境开发与外网不通&#xff0c;中央仓库连不上&#xff0c;使用 Maven 管理项目会遇到很多问题。 比如&#xff1a;依赖包缺失&#xff0c;内网的Nexus私服的包老旧&#xff0c;很久没有维护&#xff0c;项目无法运行打包&#xff0c;…

C++语言的广泛应用领域

目录 1. 系统级编程 2. 游戏开发 3. 嵌入式系统 4. 大数据处理 5. 金融和量化分析 6. 人工智能和机器学习 7. 网络和通信 结语 C是一种多范式编程语言&#xff0c;具有高性能、中级抽象能力和面向对象的特性。由Bjarne Stroustrup于1979年首次设计并实现&#xff0c;C在…

基于蜉蝣算法优化概率神经网络PNN的分类预测 - 附代码

基于蜉蝣算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于蜉蝣算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于蜉蝣优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神经网络的光滑…

关于react输入框回显问题

绑定表单元素的值到组件状态中。例如&#xff0c;对于一个文本框&#xff0c;可以使用onChange事件将用户输入的值绑定到组件状态中。 创建一个处理表单提交的函数。这个函数通常会使用组件状态中的值来更新页面上的数据。 在handleSubmit函数中&#xff0c;防止默认表单提交…

rust_for_linux驱动完整版记录

文章目录 [清华开源操作系统训练营]《Rust fox Linux》课程的练习1-2完整版记录。1. 环境搭建2. 编译rust内核2.1 下载源代码2.2 安装rust支持2.3 检查linux内核是否支持rust2.4 编译linux内核 3. aarch64的qemu环境3.1.下载源代码3.2. 解压编译安装3.3. 配置环境变量3.4.验证 …

定时任务 注解

DisallowConcurrentExecution 用于禁止并发执行多个相同定义的Job。 该注解添加在JOB的实现类上的&#xff0c;不是不能同时执行多个JOB&#xff0c;而是不能并发执行同一个Job&#xff0c;允许同时执行多个不同的JobDetail。 一个任务设定的时间间隔为3秒&#xff0c;但该任务…

Excel表列序号

题意&#xff1a; 给你一个字符串 columnTitle &#xff0c;表示 Excel 表格中的列名称。返回 该列名称对应的列序号 。 例如&#xff1a; A -> 1 B -> 2 C -> 3 … Z -> 26 AA -> 27 AB -> 28 … 示例 1: 输入: columnTitle “A” 输出: 1 示例 2: 输…

云计算运维面试

一、Linux的启动过程 1.加电 2.加载bios设置 3.加载grub 4. 加载内核系统到内存中 5.加载配置文件 6.加载内核模块 7.完成相应初始化工作和启动相应服务 8.启动系统进程 9.出现登录界面 10.开机自启动完成 二、查看系统的版本和内核 1、 查看版本 cat /etc/redha…

指标体系:洞察变化的原因

一、指标概述 指标体系是指根据运营目标&#xff0c;整理出可以正确和准确反映业务运营特点的多个指标&#xff0c;并根据指标间的联系形成有机组合。 指标体系业务意义极强&#xff0c;所有指标体系都是为特定的业务经营目的而设计的。指标体系的设计应服从于这种目的&#x…

【fast2021论文导读】 Learning Cache Replacement with Cacheus

文章:Learning Cache Replacement with Cacheus 导读摘要: 机器学习的最新进展为解决计算系统中的经典问题开辟了新的、有吸引力的方法。对于存储系统,缓存替换是一个这样的问题,因为它对性能有巨大的影响。 本文第一个贡献,确定了与缓存相关的特征,特别是,四种工作负载…

Leetcode81. Search in Rotated Sorted Array II

旋转数组找元素&#xff0c;其中元素不唯一 可以延续上一题 我们依然要在有序的部分里面找 如果 n u m s [ l ] n u m s [ m i d ] n u m s [ r ] nums[l] nums[mid]nums[r] nums[l]nums[mid]nums[r]那我们也是啥都不知道&#xff0c;那只能一个个搜了 class Solution {…

Java自学第9课:JSP基础及内置对象

目录&#xff1a; 目录 1 JSP基础知识架构 1 指令标识 1 Page命令 2 Including指令 3 taglib指令 2 脚本标识 1 JSP表达式 2 声明标识 3 代码片段 3 JSP注释 1 HTML注释 2 带有JSP表达式的注释 3 隐藏注释 4 动态注释 4 动作标识 1 包含文件标识 2 请求转发标…

模型部署:量化中的Post-Training-Quantization(PTQ)和Quantization-Aware-Training(QAT)

模型部署&#xff1a;量化中的Post-Training-Quantization&#xff08;PTQ&#xff09;和Quantization-Aware-Training&#xff08;QAT&#xff09; 前言量化Post-Training-Quantization&#xff08;PTQ&#xff09;Quantization-Aware-Training&#xff08;QAT&#xff09; 参…