发现最近不在状态了, 很多问题一涌而现。 有些问题还真难搞, 像一些文件在本地操作挺好的。但要用web端去访问的时候, 就不对劲了。总是有些奇怪的问题。 明明是配置了对外开放的文件访问路径,但就是访问不了文件。哎,是真的迷。还是得看看路径在项目访问的规则。 对于这种问题真棘手。关于springboot 对于文件的开放路径,不拦截直接给前端访问的功能。我看很多都说在application.yml 配置下路径就好了。
springboot配置静态资源访问路径
其实在springboot中静态资源的映射文件是在resources目录下的static文件夹,springboot推荐我们将静态资源放在static文件夹下,因为默认配置就是classpath:/static/但是之前我们都习惯将静态资源文件放在webapp下面,特别是打war包的项目,但是如果我们直接创建一个webapp文件目录,将静态资源放进去,在项目启动的时候我们是访问不到的,所以我们要进行一些项目配置。
改变springboot项目静态资源文件访问目录的方式有两种,一种是直接在配置文件中进行设置,另一种是我们编写一个配置类,继承org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter
或者org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport
并重写addResourceHandlers(ResourceHandlerRegistry registry)方法,其实addResourceHandlers(ResourceHandlerRegistry registry)方法就是个空方法。
第一种配置文件里配置
#静态资源访问路径 spring.mvc.static-path-pattern=/** #静态资源映射路径 spring.resources.static-locations=classpath:/
第二种:通过编程进行设置
@Configuration public class MvcConfig extends WebMvcConfigurerAdapter { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { // 这里之所以多了一"/",是为了解决打war时访问不到问题 registry.addResourceHandler("/**").addResourceLocations("/","classpath:/"); } }
不过真的是不建议我们修改静态资源文件的访问目录为classpath:/,因为如果我们改了静态资源的访问目录为classpath:/,这会带来一个隐患,就是classpath下的所有文件都是可以被访问到的。其实我们直接使用springboot的默认设置的静态资源目录(classpath:/statc/)就可以了,不管是打war包还是jar包都是可以被访问的,同时也会杀死别的目录下的文件被访问的机会。
但是有时候我们真的是需要访问别的路径,比如我之前做的一个项目,进行图片的上传,因为项目不是很大,所以没有用到文件服务器,直接就是本地保存的,如果直接保存在项目目录下这回带来一个很大的问题,项目代码重新发布的时候要把之前上传的图片拷贝出来,发布好后再放回去,这样很麻烦,所以需要放到项目外面,这个时候不想改变静态资源访问目录都不想了,但是还是建议将静态资源放进static文件夹下,别的访问目录我们可以直接在后面追加,这样就很完美了。
想要访问别的路径还是得自己配置, 看样子试下static 路径下,看能不能行。