内容简介:未打包是没问题的,打完包后就发生了错误。开始逐步定位问题。
引言
Alice
上线后,学生导入模版文件下载失败。
未打包是没问题的,打完包后就发生了错误。开始逐步定位问题。
原方法
File file = ResourceUtils.getFile(ResourceUtils.CLASSPATH_URL_PREFIX + "static/导入学生模板.xlsx"); InputStream inputStream = new FileInputStream(file); Workbook workbook = new XSSFWorkbook(inputStream);
经测试,问题出在 ResourceUtils.getFile
这个方法上。
ResourceUtils.CLASSPATH_URL_PREFIX + "static/导入学生模板.xlsx"
字符串拼接后就是 classpath:static/导入学生模板.xlsx
,没打包时,该方法能正常获取到该 Excel
文件。
ResourceUtils.getFile
是获取磁盘上的文件,而打完包之后, resources
目录了下的所有资源都被打进了 jar
包,所以不存在相应的 Excel
文件,获取的时候就报错了。找不到文件。
测试
将打好的 jar
包解压,主要的东西都在 BOOT-INF
里。 META-INF
里面有 pom.xml
,应该是存储项目信息的。 org
目录内是 springframework
的一些 class
字节码。
BOOT-INF
内就是本项目的核心代码与第三方库。
classes
目录下就是本项目的核心代码,我们的 Excel
就在这里面。
lib
目录下是项目中引用的第三方 jar
包,里面有我们常用的 slf4j
, spring-boot
等 jar
包。
所以, Spring Boot
的项目一般都较大,有一部分原因是把许多第三方包都打包进去了。
解决方案
@Autowired
一个 ResourceLoader
,然后调用 getResource
方法,加载资源。
想想也不难理解, SpringBoot
启动时读取 application.yml
配置, Spring
的源码中就是使用 ResourceLoader
实现的。
只不过源码中直接用的上下文对象,一个上下文对象不只是一个 IOC
容器,还是一个资源加载器。(上下文其实有很多的功能,可以点开 Spring
源码看一看,很有意思。)
ResourcePatternResolver
派生自 ResourceLoader
接口。
代码模版,以后读取文件就这样写,啥毛病没有:
Resource resource = this.resourceLoader.getResource(ResourceUtils.CLASSPATH_URL_PREFIX + "static/导入学生模板.xlsx");
总结
千淘万漉虽辛苦,吹尽狂沙始到金。
一路走来,一路总结。最后留下的,是小本本中记录的代码模版与最佳实践。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Build Your Own Web Site the Right Way Using HTML & CSS
Ian Lloyd / SitePoint / 2006-05-02 / USD 29.95
Build Your Own Website The Right Way Using HTML & CSS teaches web development from scratch, without assuming any previous knowledge of HTML, CSS or web development techniques. This book introduces you......一起来看看 《Build Your Own Web Site the Right Way Using HTML & CSS》 这本书的介绍吧!