1.问题分析
springboot项目 jar包运行时resources文件在jar包里,并不能从web服务器直接进行访问到。
resources作为源文件打包后其下的文件直接会被存放到classes下
2.解决问题(代码)
输入参数:HttpServletRequest request, HttpServletResponse response
//ClassPathResource读取输入流 注意:此输入流并不能直接响应给客户端!
InputStream inputStreamClassPath =new ClassPathResource("上层文件目录/"+fileName).getInputStream();
//创建临时文件
File tempFile =new File(fileName);
//通过输入流复制进文件
FileUtils.copyInputStreamToFile(inputStreamClassPath,tempFile);
//再通过创建的文件重新获取输入流 注意:此输入流可以响应给客户端进行服务器文件的下载!
InputStream inputStream =new FileInputStream(tempFile);
//设置response头信息
response.reset();
response.setContentType("application/octet-stream");
response.setHeader("Content-Length", String.valueOf(inputStream.available()));
response.setHeader("Content-Disposition","attachment;filename=" + URLEncoder.encode(fileName,"UTF-8").replace("+","%20"));
OutputStream out = response.getOutputStream();
//创建缓冲区 响应给客户端
FileCopyUtils.copy(new BufferedInputStream(inputStream),new BufferedOutputStream(out));
//别忘记 关闭流与删除临时文件
3.测试运行
jar包 java -jar Windows文件下载没问题
tomcat运行 linux文件下载没问题
ide运行 Windows文件下载没问题