前些日子,团队一致通过基于spring boot构建新架构。经过两个月的加班加点,总算完成了整体构建,不得不说,spring boot还是存在很多坑。。。。(即使近两年spring boot开发很火,而且网上资料也层出不穷)。
这两天在开发文件管理模块,其中包含静态的图片允许外界直接访问(这里也主要讲图片)。我们知道,spring boot是有默认的静态资源目录的。但我们团队发现,把图片上传到这些静态资源目录后,浏览器访问这些图片都是404。。。我们尝试在properties把这些静态目录全设置到 spring.resources.static-locations里面,发现还是访问失败。在WebMvcConfig配置代码里面设置静态资源,也还是无效,很是纳闷。。。后来想想,既然你默认的不给我用,我用自定义的目录也不行??偶遇一大牛的博客,才终于解决这个问题。下面说说我们的解决方案:
1、在磁盘内确定一个存储图片的目录,比如 D:/photo/
2、在application.properties文件内添加静态文件目录:
web.upload-path=D:/photo/
spring.mvc.static-path-pattern=/**
spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,\
classpath:/static/,classpath:/public/,file:${web.upload-path}
注:web.upload-path是本人自定义的,spring.mvc.static-path-pattern必须设置成/**,最后把file:${web.upload-path}加入到spring.resources.static-locations的后面。(大牛有明确指出,这里必须要带上spring boot约定好的静态目录,否则这些静态目录会被覆盖。这里就先听大牛的吧,反正没时间去做测试)
3、至此设置完成。启动工程后,我们把一张图片复制到 D:/photo/路径下,直接通过浏览器访问这张图片,亲测成功(这里不截图了。。。。)。
4、除了以上的方案,我们团队最早还有一种方案,那就是将磁盘内的图片以流的形式返回给浏览器,浏览器也能正常显示图片。但有个问题,那就是增加代码的复杂度,如果图片大点,读流的过程还会出现卡顿,很不友好!
问题是解决了,但还是有一个问题没弄清楚,为什么在static(代表spring boot约定好的静态目录)里面动态加的图片,外界不能直接访问呢?工程内的js、css文件也都是放在static目录,平时开发都是在程序启动的情况下修改js、css等文件,都能直接生效,为什么直接写进去的图片却不行呢?还望路过的道友能给个答案
最后附上大牛博客url:https://blog.csdn.net/kilua_way/article/details/54601195
感谢大牛的无私奉献!!!