SpringBoot excel模板下载,各种踩坑

本文记录了一位开发者在项目中遇到的Excel模板下载问题。最初尝试从静态资源目录读取文件,但在生产环境报错。尝试了ClassPathResource和ClassLoader的方法仍无法解决问题,发现文件名使用了中文。将文件名改为英文后,文件可以下载,但下载的文件提示需要修复。最终解决了文件下载和编码问题,确保了文件正常下载。
摘要由CSDN通过智能技术生成

项目场景:

最近做的一个项目有一个需求是,excel模板下载,由于是第一次做,踩坑了

问题描述:

最初思路:把所需的excel模板文件放在resources/static下面,然后用io流去读

在这里插入图片描述

最初我都路径是这样写的,看着没毛病,对吧!

        public void download() {
              String filePath = "static/ExcelTemplate/设备模板.xlsx";
              File file = new File(filePath);
        }

原因分析:

那么问题来了:
  在开发环境中是没啥大问题的
  倒是到了生产环境就没法用了
报错:找不到路径,自然没法下载

解决方案:

作为一名合格的程序员,当然是百度呐!
在这里插入图片描述

方案一:

 ClassPathResource classPathResource = new ClassPathResource("static/ExcelTemplate/设备模板.xlsx");
 InputStream inputStream = classPathResource.getInputStream();

用上面这种方法去读,发版后,不行
方案二:

String filePath = "static/ExcelTemplate/设备模板.xlsx";
InputStream fis = this.getClass().getClassLoader().getResourceAsStream(filePath);

用上面这种方法去读,发版后,还是不行

到这里,基本快崩溃了,换了两种,加上之前的一种,三种解决方案都不可以.
在这里插入图片描述
因为是我们的运维小哥发版的,看不见报错,找了小哥登录了k8s,一瞅日志,果然,还是找不到路径
既然有问题思路了,咱就往这方面走就完事了------继续百度

在这里插入图片描述
看各种博客,网站,突然看见这么一串字:
路径中,文件取名不要用中文
半信半疑,试了一试,可以了
在这里插入图片描述
这不天助我也,立刻马上用上了
你以为到这就结束了,单纯
下载下来的文件提示要 修复 修复 修复 修复
在这里插入图片描述

最终解决方案:

文件存放位置
在这里插入图片描述
代码:

        public void Exceldownload() {
	              InputStream fis = null;
	        try {
	            String Path = "static/ExcelTemplate/DeviceTemplate.xlsx";
	            fis = this.getClass().getClassLoader().getResourceAsStream(Path);
	            //我的项目加上这句会报嵌套错误
	            //response.setContentType("application/vnd.ms-excel;charset=UTF-8");
	            response.setCharacterEncoding("UTF-8");
	            response.setHeader("Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode("网关模板.xlsx", "UTF-8"));
	            byte[] b = new byte[50];
	            int length;
	            while ((len = fis.read(b)) > 0) {
	                response.getOutputStream().write(b, 0, length);
	            }
	        } catch (Exception e) {
	        } finally {
	            response.getOutputStream().flush();
	            response.getOutputStream().close();
	            fis.close();
	        }
        }

欢迎大家指出错误
以上为小编的踩坑记录,仅用于分享,部分素材来源于网络,如有侵权,请联系删除
如果你觉的我写的还不错,或者能帮到里的话,给我点个赞吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值