springboot项目 jar包运行 resources下文件下载问题

1.问题分析

springboot项目 jar包运行时resources文件在jar包里,并不能从web服务器直接进行访问到。

resources作为源文件打包后其下的文件直接会被存放到classes下


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文件下载没问题

你可能感兴趣的:(springboot项目 jar包运行 resources下文件下载问题)