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

SpringBoot 下的Excel文件损坏与内容乱码问题

序言

随着打包部署的方式的改变,原本正常运行的代码可能带来一些新的问题,比如我们现在使用SpringBoot 的方式生成Jar包直接运行,就会对我们再在Resource下的Excel文件产生影响,导入与预期不符的情况发生cuiyaonan2000@163.com

比如:我们会在工程中提供一些模板(Excel文件),然后供前端调用下载,但是下载后内容时乱码,或者不能正常的打开该文件

打包问题

我们在通过编译后发现 放置在target目录下的excel文件打不开了。因为原本文件就打不开了,所以你在后期下载的时候肯定就有问题。

原因:SpringBoot会对resources下文件进行压缩,导致word,excel格式异常cuiyaonan2000@163.com

增加如下的配置,告诉Springboot 相关的文件不要压缩

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

关于Excel等特殊文件的以流的方式下载的问题

看如下我们经常使用的文件下载或者复制的代码

public static void main(String[] args) {String inputFileName = "C:\\cuiyaonan2000@163.com\\123.xlsx"; // 输入文件名String outputFileName = "C:\\cuiyaonan2000@163.com\\copy-123.xlsx"; // 输出文件名try (FileReader fr = new FileReader(inputFileName);FileWriter fw = new FileWriter(outputFileName)) {char[] buffer = new char[1024]; // 缓冲数组int length;while ((length = fr.read(buffer)) != -1) {fw.write(buffer, 0, length); // 将读取的内容写入输出文件}} catch (IOException e) {e.printStackTrace();}}

如果是文本文件txt,csv.什么的完全没问题,但是如果是Excel这种文件,内容就会是乱码或者显示文件已经损坏

那我们再换一种方式来考本文件

  public static void main(String[] args) throws IOException {try {FileOutputStream os = new FileOutputStream(new File("C:\\\\cuiyaonan2000@163.com\\\\123.xlsx"));FileInputStream resource = new FileInputStream("C:\\\\cuiyaonan2000@163.com\\\\copy-123.xlsx");FileCopyUtils.copy(resource, os);System.out.print("SUCEESS");} catch (Exception e) {e.printStackTrace();}}

如上的拷贝就没有任何问题,那我们看看FileCopyUtils.copy(resource.getInputStream(), os);的源码给你我们的byte[] 字节数组拷贝的区别是什么.

因为InputStream 或者OutputStream 本身就是字节流不涉及什么编码格式.,像FileInput ,FileOut就会设计编码格式,但是我们在创建他们的时候还不能直接设置编码格式,需要经过一圈的包装转换才能设置

BufferedWriter writer = new BufferedWriter (new OutputStreamWriter (new FileOutputStream (filePath,true),"UTF-8"));FileWriter writer = new FileWriter(filePath,true);

http://www.lryc.cn/news/472443.html

相关文章:

  • 官宣下代GPU存在缺陷,50系显卡或将迎来涨价
  • 使用pytorch实现LSTM预测交通流
  • C/C++(八)C++11
  • 使用three.js 实现 自定义绘制平面的效果
  • 玩转Docker | 使用Docker部署捕鱼网页小游戏
  • 第2章 Android App开发基础
  • 通过 SYSENTER/SYSEXIT指令来学习系统调用
  • Nginx开发实战——网络通信(一)
  • w外链如何跳转微信小程序
  • 获取平台Redis各项性能指标
  • STM32 HAL 点灯
  • 【http作业】
  • WPF+MVVM案例实战(十一)- 环形进度条实现
  • 简述MCU微控制器
  • 微服务的雪崩问题
  • Java基础(4)——构建字符串(干货)
  • logback日志脱敏后异步写入文件
  • 电容的基本知识
  • 【Axure高保真原型】分级树筛选中继器表格
  • STM32 I2C通信:硬件I2C与软件模拟I2C的区别
  • 服务器新建用户
  • 鸿蒙开发融云demo发送图片消息
  • 音视频入门基础:AAC专题(11)——AudioSpecificConfig简介
  • OpenCV基本操作(python开发)——(8)实现芯片瑕疵检测
  • 聚水潭商品信息集成到MySQL的高效解决方案
  • # centos6.5 使用 yum list 报错Error Cannot find a valid baseurl for repo bas 解决方法
  • 【专题】2023-2024中国保险数字化营销调研报告汇总PDF洞察(附原数据表)
  • ““ 引用类型应用举例
  • 数字图像处理 - 基于ubuntu20.04运行.NET6+OpenCVSharp项目
  • git cherry-pick用法详解