在做下载功能时,我们会发现明明在IED中运行的好好的,可是一部署,功能就不好用了。其中一个原因可能就是找不到要下载的文件路径了。如果报类似下面的错误,那肯定就是这个问题了,报错信息如下:
java.io.FileNotFoundException: file:\demo.jar!\BOOT-INF\classes!\template-files\crl\demo.xlsx (文件名、目录名或卷标语法不正确。)
解决办法是使用getResourceAsStream方法,该方法同样适合war包,示例如下:
@RequestMapping(value = "downLoad")
public void downLoad2(HttpServletResponse response) {
String path = "template-files/crl/demo.xlsx";
try {
InputStream inputStream =this.getClass().getClassLoader().getResourceAsStream(path);
OutputStream outputStream = response.getOutputStream();
response.setContentType("application/x-download");
response.addHeader("Content-Disposition", "attachment;filename="+"demo.xlsx");
IOUtils.copy(inputStream, outputStream);
outputStream.flush();
inputStream.close();
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
文件路径:resources/template-files/crl/demo.xlsx