下载为空这个原因很简单,新同事写的下载是这样写的,这种只能在本地用下,打包上线后就g了…
String fileName = "test.xlsx";
String filePath = System.getProperty("user.dir")+"\\src\\main\\resource\\staitc\\"+fileName;
File file = new File(filePath);
FileInputStream fileInputStream = new FileInputStream(file);
IOUtils.copy(fileInputStream, response.getOutputStream());
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
response.setHeader("Content-disposition","attachment:fileName="+ URLEncoder.encode(fileName,"UTF-8"));
response.setContentLength(fileInputStream.getChannel().size());
这个问题不大,只要换种方式读取类路径下文件即可,
InputStream resourceAsStream = this.getClass().getResourceAsStream("/static/" + fileName);
重点是下面这个打不开的问题
在springboot工程的类路径下 /static/ 目录下创建了一个模板excel文件,比如 template.xlsx,写的文件下载功能将这个文件下下来的时候无法打开,提示内容已损坏。
一开始我以为是下载的写法有问题,比如响应头的content-type设置不对,content-length没有设置等问题导致的,最终发现是类路径下的excel编译后,会变成原来的大
出现原因是因为同事在 pom.xml 中配置了 配置了
<profiles>
<profile>
<id>devid>
<activation>
<activeByDefault>trueactiveByDefault>
activation>
<properties>
<profileActive>devprofileActive>
properties>
profile>
// 省略几个 profile
<profile>
<id>prodid>
<properties>
<profileActive>prodprofileActive>
properties>
profile>
profiles>
<build>
<resources>
<resource>
<directory>src/main/resourcesdirectory>
<filtering>truefiltering>
resource>
resources>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-resources-pluginartifactId>
<configuration>
<encoding>utf-8encoding>
<useDefaultDelimiters>trueuseDefaultDelimiters>
configuration>
plugin>
plugins>
build>
项目中按照不同的环境写了多个环境的配置文件
-application.yml
-application-dev.yml
-application-test.yml
-application-prod.yml
在 application.yml 中
spring:
profiles:
active: @profileActive@
此时因为pom配置的true,所以会导致其上配置的directory配置的路径下的资源都会经过maven一次处理,会将其内的@@包含的变量使用其定义的变量替换。
<profile>
<id>devid>
<activation>
<activeByDefault>trueactiveByDefault>
activation>
<properties>
<profileActive>devprofileActive>
properties>
profile>
我这里配置的默认激活的是dev的配置,所以默认会使用 dev这个变量去覆盖所有类路径下的 @profileActive@,也即打包后的application.yml如下
spring:
profiles:
active: dev
而在处理excel、word等文件时,处理会其会变大且无法打开…不清楚怎么造成变大。
在maven的 maven-resources-plugin 插件中添加配置 xlsx,表示不对xlsx为后缀的文件处理,点击该标签可以看到其默认已经对于图片文件进行处理,所以图片文件大小不会变。
Additional file extensions to not apply filtering (already defined are : jpg, jpeg, gif, bmp, png)
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-resources-pluginartifactId>
<configuration>
<encoding>utf-8encoding>
<useDefaultDelimiters>trueuseDefaultDelimiters>
<nonFilteredFileExtensions>xlsxnonFilteredFileExtensions>
configuration>
该配置项是个集合类型,可以以逗号分隔配置多个:比如 xlsx,docx