当前位置: 首页 > news >正文

excel下载模板,0KB或者乱码问题

Sptingboot项目
— maven打包,云效,docker,k8s
场景
— 导出excel模板
问题
1.乱码
在这里插入图片描述

2.下载为0KB,打开没有数据
在这里插入图片描述
模板内容
在这里插入图片描述

测试代码

测试方法

方法过程结果问题原因
将文件直接放到服务器使用接口下载数据正常,排除文件问题排除接口问题,文件问题
文件放到resource目录下使用接口下载下载乱码使用相同接口下载乱码,猜测是maven编译问题
文件移出到resouce目录外使用接口下载下载为0KB使用相同接口下载乱码,猜测是maven编译问题

代码

InputStream inputStream = null;ServletOutputStream servletOutputStream = null;try {//注意修改目录Resource resource = new DefaultResourceLoader().getResource("classpath:file/goods_import.xls");response.setContentType("application/force-download");response.setHeader("Content-Disposition", "attachment;fileName=" + new String("goods_import".getBytes(), StandardCharsets.ISO_8859_1)+ ".xls");inputStream = resource.getInputStream();servletOutputStream = response.getOutputStream();IOUtils.copy(inputStream, servletOutputStream);response.flushBuffer();} catch (Exception e) {log.error("下载批量上传用户模板文件错误", e);} finally {try {if (servletOutputStream != null) {servletOutputStream.close();}if (inputStream != null) {inputStream.close();}} catch (Exception e) {log.error("下载批量上传用户模板文件错误", e);}}

过程-可以跳过直接看解决办法
— 遵循网上的办法,使用字节流,设置字节大小,设置编码,都测试过一遍。

设置字节大小
   		InputStream inputStream = getClass().getClassLoader().getResourceAsStream("classpath:file/goods_import.xls");File file = new File("goods_import.xls"); // 指定下载文件的路径和名称try (OutputStream outputStream = new FileOutputStream(file)) {// 将inputStream中的数据写入到outputStream中,‌确保文件不为0KBbyte[] buffer = new byte[1024];int bytesRead;while ((bytesRead = inputStream.read(buffer)) != -1) {outputStream.write(buffer, 0, bytesRead);}} catch (IOException e) {e.printStackTrace(); // 处理异常}finally {if (file.exists()){file.delete();}}

设置字符集编码

		response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");response.setHeader("Content-Disposition", "attachment; filename=\"" + "file/goods_import.xls" + "\"");//这里设置为GBK,UTF-8都不行response.setCharacterEncoding("GBK");try (BufferedInputStream inputStream = new BufferedInputStream(ImportBusiness.class.getClassLoader().getResourceAsStream("file/goods_import.xls"));OutputStream outputStream = response.getOutputStream()) {if (inputStream == null) {// 处理文件未找到的情况response.sendError(HttpServletResponse.SC_NOT_FOUND, "File not found");return;}byte[] buffer = new byte[1024];int bytesRead;while ((bytesRead = inputStream.read(buffer)) != -1) {outputStream.write(buffer, 0, bytesRead);}outputStream.flush();} catch (IOException e) {// 处理IO异常response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "IO error");}

使用字节流输出

/*** 模板下载*/public void downloadTemplate(HttpServletResponse response) {OutputStream out = null;InputStream in = null;ByteArrayOutputStream bos = null;String fileName = "good_import";try {// 读取模板Resource res = new ClassPathResource("classpath:file/goods_import.xls");XSSFWorkbook workbook = new XSSFWorkbook(res.getInputStream());// 转换为字节流bos = new ByteArrayOutputStream();workbook.write(bos);byte[] barray = bos.toByteArray();in = new ByteArrayInputStream(barray);response.reset();response.setContentType("application/octet-stream");response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8") + ".xls");out = response.getOutputStream();byte[] b = new byte[1024];int len;while ((len = in.read(b)) > 0) {out.write(b, 0, len);}out.flush();} catch (Exception e) {log.error("下载模板失败", e);} finally {if (null != in) {try {in.close();} catch (IOException e) {log.error("关闭资源异常", e);}}if (null != out) {try {out.close();} catch (IOException e) {log.error("关闭资源异常", e);}}if (null != bos) {try {bos.flush();bos.close();} catch (IOException e) {log.error("关闭资源异常", e);}}}}

经测试以上方法均不行,然后考虑到jar打包会被编译,会不会是这个导致的呢。能不能忽略掉这个xls文件呢?

这里使用maven打包,使用提供的插件排除,如下

			<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>3.2.0</version><configuration><nonFilteredFileExtensions><nonFilteredFileExtension>xlsx</nonFilteredFileExtension><nonFilteredFileExtension>xls</nonFilteredFileExtension></nonFilteredFileExtensions></configuration></plugin>

如图框中区域

重新调用接口下载,文件正常

相关文章:

excel下载模板,0KB或者乱码问题

Sptingboot项目 — maven打包&#xff0c;云效&#xff0c;docker&#xff0c;k8s 场景 — 导出excel模板 问题 1.乱码 2.下载为0KB&#xff0c;打开没有数据 模板内容 测试代码 测试方法 方法过程结果问题原因将文件直接放到服务器使用接口下载数据正常,排除文件问题排…...

JDBC连接Mysql数据库超详细讲解

JDBC连接Mysql数据库 如何导入驱动jar包 进入mysql官网 – https://www.mysql.com/ 点击下载找到方框内选项 点击 在项目文件夹创建lib文件 , 将下载好的驱动器导入 , 再添加到项目即可 步骤一&#xff1a;注册JDBC驱动 在Java中&#xff0c;要与数据库进行交互&…...

ArcGIS基础:自定义创建点线面等样式符号以方便使用

有时&#xff0c;使用ArcGIS自带的符号样式库无法满足我们使用要求&#xff0c;还需要进行调整&#xff0c;可能会浪费一些时间&#xff0c;那么自己新建一些样式符号备用&#xff0c; 需要的时候直接使用&#xff0c;会节省很多时间&#xff0c;大家学会之后&#xff0c;对学…...

蔚来2025届全球校招笔试/测评通关攻略北森测评题库更新了!

蔚来2025届全球校园招聘笔试/测评攻略 ​尊敬的各位考生&#xff0c;蔚来汽车2025届全球校园招聘笔试/测评环节即将开启。为了帮助您更好地准备并顺利通过这一环节&#xff0c;我们特此提供以下详细攻略。 一、考前准备 确认考试时间&#xff1a;请务必在截止日期前完成考试&am…...

如何在linux系统上部署Redis

<1>简介 Redis 全称 Remote Dictionary Server&#xff08;远程字典服务器&#xff09;&#xff0c;是一个高性能的(key/value)分布式内存数据库&#xff0c;基于内存运行并支持持久化的NoSQL数据库&#xff0c;是当前最热门的NoSql数据库之一,也被人们称为数据结构服务…...

操作系统开发行业的市场需求分析

操作系统作为计算机软件生态的核心&#xff0c;其开发不仅关乎技术的深度与广度&#xff0c;更与市场需求紧密相连。随着技术的不断进步和各行各业对数字化转型的迫切需求&#xff0c;操作系统开发行业面临着日益复杂且多样化的市场需求。以下从基础功能需求、技术创新需求、行…...

SpringMVC 的 拦截器

Spring MVC 提供了一套拦截器&#xff08;Interceptor&#xff09;机制&#xff0c;主要用于处理 Web 请求到达控制器之前或响应离开控制器之后执行一些操作。拦截器可以用于执行预处理&#xff08;如验证用户身份&#xff09;和后处理&#xff08;如清理资源或修改响应&#x…...

Redisson可重入锁原理(基于黑马视频总结,保姆级)

上一篇文章我们基于redis的set nx ex 命令以及Lua脚本实现了基本的分布式锁&#xff0c;但是还存在一下几点问题。于是又引出了redisson。 为什么基于SETNX的分布式锁无法实现可重入 先在method1中获取锁&#xff0c;获取成功后又调用method2&#xff0c;而method2内部也会获取…...

Ubuntu 安装 Watt-Toolkit

一、下载 Watt-Toolkit 下载Watt-Toolkithttps://steampp.net/download 二、设置 Watt-Toolkit 打开 Watt-Toolkit&#xff0c;点击 “网络加速→加速设置&#xff0c;打开证书文件夹” &#xff0c;当前证书路径为&#xff1a;/home/yammie/.local/share/Steam/Plugins/Acc…...

python中的省略号(...)

下面对python学习中遇到的省略号做个总结 # 1. 前言 在Python中&#xff0c;一切皆对象&#xff0c;...也是对象&#xff0c;它和对象Ellipsis是等价的。对象...和Ellipsis的类型都是ellipsis&#xff0c;代码示例如下。 print(Ellipsis) # 输出&#xff1a;Ellipsis print(…...

第129天:内网安全-横向移动WmiSmbCrackMapExecProxyChainsImpacket

这里这个环境继续上一篇文章搭建的环境 案例一&#xff1a; 域横向移动-WMI-自带&命令&套件&插件 首先上线win2008 首先提权到system权限 wmic是windows自带的命令&#xff0c;可以通过135端口进行连接利用&#xff0c;只支持明文方式&#xff0c;优点是不用上传别…...

ChatGPT教我将MySQL中where find_in_set改成PostgreSQL支持的写法

问题 之前使用Mybatis&#xff0c;在MySQL中使用如下SQL语句没有问题&#xff1a; SELECT * FROM dept WHERE find_in_set(5,dept_parent);现在切换到PostgreSQL,发现find_in_set函数不能使用。 解决 SELECT * FROM dept WHERE 5 ANY(string_to_array(dept_parent, ,));总…...

Python命令模式:掌控你的代码指令

Python命令模式&#xff1a;掌控你的代码指令 在软件工程的浩瀚海洋中&#xff0c;命令模式&#xff08;Command Pattern&#xff09;是一盏指引航向的明灯&#xff0c;它将请求或操作封装成对象&#xff0c;从而让代码更加灵活、可扩展。本文将深入探讨Python中的命令模式&am…...

【物联网】(防水篇)电子产品 IPX7 防水级别测试的具体流程

电子产品 IPX7 防水级别测试的具体流程 1. 准备工作&#xff1a; - 准备一个足够大的浸水箱&#xff0c;确保水深至少为 1 米&#xff0c;以满足 IPX7 测试的标准要求。 - 将水温控制在标准温度范围内&#xff0c;通常在 15-35 摄氏度之间&#xff0c;以模拟正常使用环境。 2…...

Redis 实现消息队列

Redis 实现消息队列 文章目录 Redis 实现消息队列导引1. 基于List结构的消息队列2. 基于PubSub的消息队列3. 基于Stream的消息队列(推荐)3.1 XADD3.2 XREAD3.3 XGROUP 导引 消息队列(Message Queue)&#xff0c;从概念上来理解就是用来存放消息的队列&#xff0c;最简单的消息…...

模板初阶(详解)

一、泛型编程 为了引出模板&#xff0c;我们来看下面代码&#xff0c;比如要实现不同类型的交换函数&#xff0c;如下&#xff1a; void Swap(int& a, int& b) {int c a;a b;b c; } void Swap(char& a, char& b) {char c a;a b;b c; } void Swap(doubl…...

对称加密算法解析:DES、AES及其在`pycryptodome` 和 `crypto-js` 模块中的应用

&#x1f4da; 对称加密算法解析&#xff1a;DES、AES及其在pycryptodome 和 crypto-js 模块中的应用 &#x1f5dd;️ DES 算法 算法原理 数据加密标准&#xff08;DES&#xff09;是一种对称密钥加密算法&#xff0c;用于保护数据的安全。DES 使用一个 56 位的密钥进行加密…...

C++设计模式(代理模式)

1. 电话虫 在海贼中&#xff0c;有一种神奇的通信工具叫做电话虫&#xff08;Den Den Mushi&#xff09;&#xff0c;外形如蜗牛&#xff0c;身上带有斑点或条纹或通体纯色&#xff0c;壳顶上有对讲机或按键&#xff0c;不接通时会睡觉&#xff0c;接通时会惊醒&#xff0c;并发…...

Linux系统驱动(十三)Linux内核定时器

文章目录 一、内核定时器原理二、定时器API三、使用定时器让LED灯闪烁四、使用定时器对按键进行消抖 一、内核定时器原理 内核当前时间通过jiffies获取&#xff0c;它是内核时钟节拍数&#xff0c;在linux内核启动的时候&#xff0c;jiffies开始&#xff08;按照一定频率&…...

Visual Studio 调试时加载符号慢

什么是调试符号 编译程序时生成的一组特殊字符&#xff0c;并包含有关变量和函数在生成的二进制文件中的位置以及其他服务信息的信息。 该数据集可用于逐步调试程序或检查第三方代码。 调试符号可以添加到可执行文件或库中&#xff0c;但是大多数现代编译器将它们存储为单独的…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践

作者&#xff1a;吴岐诗&#xff0c;杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言&#xff1a;融合数据湖与数仓的创新之路 在数字金融时代&#xff0c;数据已成为金融机构的核心竞争力。杭银消费金…...