解决Springboot打包后下载流文件内容为空
时间: 2023-08-09 10:06:21 浏览: 125
Spring Boot项目打成jar包后,下载resources目录下文件为空的demo
如果您在Spring Boot应用程序中使用了下载流文件的功能并且在打包后下载文件内容为空,可能是因为在打包时文件没有被正确地打包到jar文件中。
为了解决这个问题,您需要在pom.xml文件中添加以下插件:
```xml
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<id>repackage</id>
<configuration>
<classifier>exec</classifier>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
```
这个插件的作用是重新打包应用程序,并将所有依赖包和应用程序放在一个可执行的jar文件中。
然后,您需要将您的下载流文件的代码中的文件路径修改为类路径下的路径,如下所示:
```java
String filePath = "/yourfile.pdf"; //类路径下的路径
InputStream inputStream = getClass().getResourceAsStream(filePath);
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode("yourfile.pdf", "UTF-8"));
IOUtils.copy(inputStream, response.getOutputStream());
response.flushBuffer();
```
这样,当您打包并运行应用程序时,您应该就能够成功下载并查看您的文件了。
另外,如果您使用的是Spring Boot 2.1及以上版本,您还可以使用以下代码来下载文件:
```java
String filePath = "/yourfile.pdf"; //类路径下的路径
Resource resource = new ClassPathResource(filePath);
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode("yourfile.pdf", "UTF-8"));
IOUtils.copy(resource.getInputStream(), response.getOutputStream());
response.flushBuffer();
```
这个代码片段中,我们使用了Spring Framework提供的Resource对象来获取文件输入流,这样可以避免了使用getClass().getResourceAsStream()方法时可能出现的空指针异常。
阅读全文