项目场景:
最近做的一个项目有一个需求是,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();
}
}
欢迎大家指出错误
以上为小编的踩坑记录,仅用于分享,部分素材来源于网络,如有侵权,请联系删除
如果你觉的我写的还不错,或者能帮到里的话,给我点个赞吧!