SpringBoot 系列教程(十八):SpringBoot通过url访问获取内部或者外部磁盘图片

一、默认静态资源映射

1. 在 Spring Boot 中,默认情况下,一共有5个位置可以放静态资源,Spring Boot 默认将 /** 所有访问映射到以下目录,五个路径分别是如下5个:

classpath:/META-INF/resources/
classpath:/resources/
classpath:/static/
classpath:/public/
"/" : 静态资源存放在当前项目的根路径下,放在这个根路径下也是可以访问的

 如:
      (1).在src/main/resources/目录下创建 
           static文件夹 ,存放图片a.jpg
      (2).在src/main/resources/目录下创建 
           resources文件夹 ,存放图片b.jpg
      (3).在src/main/resources/目录下创建 
           public文件夹 ,存放图片c.jpg
      (4).在src/main/resources/目录下创建 
           META-INF/resources文件夹 

上面这几个都是静态资源的映射路径,优先级顺序为:META-INF/resources > resources > static > public > /

2.配置application.yml的端口

# 开发环境配置
server:
  # 服务器的HTTP端口,默认为8080
  port: 8787

3.浏览器分别访问:

http://localhost:8787/a.jpg
http://localhost:8787/b.jpg
http://localhost:8787/c.jpg

均能正常访问相应的图片资源。那么说明,Spring Boot 默认会挨个从 public、 resources 、static目录里面找是否存在相应的资源,如果有则直接返回。

二、自定义静态资源映射配置

        在实际开发中,可能需要自定义静态资源访问路径,那么可以继承WebMvcConfigurerAdapter(在SpringBoot2.0及Spring 5.0 WebMvcConfigurerAdapter已被废弃来实现。

第一种方式:继承WebMvcConfigurerAdapter 类实现静态资源配置

package com.sam.demo.conf;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

/**
 * 配置静态资源映射
 * @author cao
 * @since 2019/01/23
 */
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        //将所有/static/** 访问都映射到classpath:/static/ 目录下
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
    }
}

重启项目,访问:http://localhost:8787/static/c.jpg 能正常访问static目录下的c.jpg图片资源。

第二种方式:在application.properties配置文件中配置

在application.properties中添加配置:

spring.mvc.static-path-pattern=/static/**

重启项目,访问:http://localhost:8787/static/c.jpg 同样能正常访问static目录下的c.jpg图片资源。

注意:通过spring.mvc.static-path-pattern这种方式配置,会使Spring Boot的默认配置失效,也就是说,/public /resources 等默认配置不能使用

配置中配置了静态模式为/static/,就只能通过/static/来访问。

三、自定义外部静态资源映射,访问本地磁盘图片

 方式一: application.yml文件中配置 

  本地磁盘图片:

  

访问:http://127.0.0.1:8787/images/护眼模式_20190123110237.jpg

注意:  如果yml中配置了项目访问前缀 context-path,请注意访问路径加上,别漏掉了!

方式二: 在代码上配置, 继承WebMvcConfigurerAdapter 类,但是在SpringBoot2.0及Spring 5.0 WebMvcConfigurerAdapter已被废弃,目前找到解决方案就有两种,请往下看:

  • 以下是WebMvcConfigurerAdapter 比较常用的重写接口

/** 解决跨域问题 **/
public void addCorsMappings(CorsRegistry registry) ;
/** 添加拦截器 **/
void addInterceptors(InterceptorRegistry registry);
/** 这里配置视图解析器 **/
void configureViewResolvers(ViewResolverRegistry registry);
/** 配置内容裁决的一些选项 **/
void configureContentNegotiation(ContentNegotiationConfigurer configurer);
/** 视图跳转控制器 **/
void addViewControllers(ViewControllerRegistry registry);
/** 静态资源处理 **/
void addResourceHandlers(ResourceHandlerRegistry registry);
/** 默认静态资源处理器 **/
void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer);

 重写WebMvcConfigurerAdapter类 


import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

/**
 * <pre>
 * @Description:配置静态资源映射
 * @Aouth: cao_wencao
 * @Date: 2019-01-23 16:11
 * </pre>
 */
@Configuration
public class WebMvcConfiguration extends WebMvcConfigurerAdapter {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        //addResourceHandler是指你想在url请求的路径
        //addResourceLocations是图片存放的真实路径
        registry.addResourceHandler("/images/**").addResourceLocations("file:D://Images//壁纸/");
        super.addResourceHandlers(registry);
    }

}

方式三:替代WebMvcConfigurerAdapter 已过时的解决方案,新的版本解决方案目前有两种

方案1 :直接实现WebMvcConfigurer(官方推荐使用这个)

package com.thinkingcao.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * <pre>
 * @Description:
 * @Aouth: cao_wencao
 * @Date: 2019-01-23 17:28
 * </pre>
 */
@Configuration
public class WebMvcConfig implements  WebMvcConfigurer {
  

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/images/**").addResourceLocations("file:D://Images//壁纸/");
    }
}

方案2 :直接继承WebMvcConfigurationSupport

package com.thinkingcao.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

/**
 * <pre>
 * @Description:
 * @Aouth: cao_wencao
 * @Date: 2019-01-23 17:39
 * </pre>
 */
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/images/**").addResourceLocations("file:D://Images//壁纸/");
    }
}

发布了329 篇原创文章 · 获赞 232 · 访问量 80万+

猜你喜欢

转载自blog.csdn.net/Thinkingcao/article/details/86613066