Springboot下载Excel模板,Excel表损坏问题

来自ling
跳转至: 导航搜索

https://blog.csdn.net/qq_42270377/article/details/92771349

问题剖析及解决思路

开始的时候看了一下jar包,里面打包的excel文件是有问题的,无法打开,后来断定是excel通过maven打包的问题(filter的处理问题),filter。

解决思路,maven的filter,主要作用就是替换变量,所以会把资源文件作为文本文件转码处理,并替换字符串。单对于像excel等这些二进制文件,则会出现问题。故有了上面的解决方案,当然这其中也是经历了很多波折才找到的方案。

然后发现问题依旧在,后来看一下日志,发现问题变更为jar:file:/.....终于明白问题的根源了,回想了一下java虚拟机的原理。再次解释一下:

java io中读取文件,一种是根据路径找到文件File的,一种是流的形式。

在本地可以是因为本地编辑器执行的时候,是执行的本地编译的文件,查找的还是某个文件夹中的文件

在jar包中不行是因为,jar的执行时就是一个文件不会解压,只能是在虚拟机中找到对应的stream,然后操作文件。

就像war包为什么可以一样,是因为应用服务器对其解压执行,所以依旧可以找到文件。

Springboot下载Excel模板,Excel表损坏问题.png

 <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
                <excludes>
                    <exclude>**/*.xlsx</exclude>
                    <exclude>**/*.xls</exclude>
                </excludes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>false</filtering>
                <includes>
                    <include>**/*.xlsx</include>
                    <include>**/*.xls</include>
                </includes>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>