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//壁紙/");
}
}

 

 

 

————————————————
版權聲明:本文為CSDN博主「Thinkingcao」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/Thinkingcao/java/article/details/86613066


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM