场景代码:
Resource resource = new PathMatchingResourcePatternResolver().getResource("demo/import-zip-demo.zip");
File file = resource.getFile();
异常原因:
这边的resource是Resource
类型的变量,刚开始我使用了resource.getFile()
方法获取到File对象然后再采用IO流进行操作,即:
File file = resource.getFile();
在IDE中运行是完全没有问题的,但使用mvn打包成jar包后,再运行就会提示ERROR:
java.io.FileNotFoundException
正确姿势:
后来查阅了资料说:一旦打成jar包后,使用File
是访问不到资源的内容的,应该直接使用getInputStream()
的方法进行输出,修改后:
public void downloadImportZipDemo(HttpServletResponse response) throws IOException {
response.reset();
response.setContentType("application/zip");
response.setHeader("Content-Disposition", "attachment; filename=demo.zip");
Resource resource = new PathMatchingResourcePatternResolver().getResource("demo/import-zip-demo.zip");
// 输出附件
byte[] fileBytes = IOUtils.toByteArray(resource.getInputStream());
response.addHeader("Content-Length", "" + fileBytes.length);
IoUtil.write(response.getOutputStream(),true,fileBytes);
}