場景:部署的Springboot項目,打成jar包,需要通過url直接訪問jar外部路徑的資源,本人的Springboot爲2.1.11.RELEASE。
一、配置WebMvcConfigurer,設置url訪問靜態資源映射
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
/**
* 日誌記錄器
*/
private static final Logger logger = LoggerFactory.getLogger(WebMvcConfig.class);
@Value("${image.baseImagePath}")
private String baseImagePath;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// addResourceHandler是指你想在url請求的路徑
// addResourceLocations是圖片存放的真實路
registry.addResourceHandler("/image/**")
.addResourceLocations("file:" + baseImagePath)
// 可以自定義資源處理類,對加載後的資源進行二次處理,比如圖片統一打標識、解密之類的
//.resourceChain(true).addTransformer(new SecretImageResourceTransformerSupport())
;
}
}
二、添加application.yml,再配置中配置訪問的真是路徑
############################### 圖片真實存儲位置 #############################
image:
baseImagePath: ./image_base64
三、服務器的部署路徑創建 image_base64文件夾,和jar同級目錄,裏面存放需要訪問的圖片
例如存放了12345.jpg圖片
四、啓動項目,訪問的 ip:端口/項目基本路徑/image/12345.jpg即可查看圖片,也可以支持路徑嵌套,在image_base64文件夾中在創建子目錄,訪問的時候加上即可。
例子:本人在application.yml中配置
server:
port: 8089
servlet:
context-path: /test
圖片訪問路徑:localhost:8089/test/image/12345.jpg
==========================如果需要對取出的資源加特殊處理======================================
1、將 .resourceChain(true).addTransformer(new SecretImageResourceTransformerSupport())加上
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
/**
* 日誌記錄器
*/
private static final Logger logger = LoggerFactory.getLogger(WebMvcConfig.class);
@Value("${image.baseImagePath}")
private String baseImagePath;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// addResourceHandler是指你想在url請求的路徑
// addResourceLocations是圖片存放的真實路
registry.addResourceHandler("/image/**")
.addResourceLocations("file:" + baseImagePath)
// 可以自定義資源處理類,對加載後的資源進行二次處理,比如圖片統一打標識、解密之類的
.resourceChain(true).addTransformer(new SecretImageResourceTransformerSupport())
;
}
}
2、定義自己的圖片資源處理類 SecretImageResourceTransformerSupport,繼承ResourceTransformerSupport,具體操作步驟可以參考Spring源碼的CssLinkResourceTransformer
public class SecretImageResourceTransformerSupport extends ResourceTransformerSupport {
private static String SUPPORT_IMG = "jpg";
/** 日誌記錄器 */
private static final Logger logger = LoggerFactory.getLogger(SecretImageResourceTransformerSupport.class);
@Override
public Resource transform(HttpServletRequest httpServletRequest, Resource resource, ResourceTransformerChain resourceTransformerChain) throws IOException {
resource = resourceTransformerChain.transform(httpServletRequest, resource);
String filename = resource.getFilename();
if (!SUPPORT_IMG.equals(StringUtils.getFilenameExtension(filename))) {
return resource;
}
byte[] bytes = FileCopyUtils.copyToByteArray(resource.getInputStream());
// 本人做的的圖片解密,你也可以根據自己需要將bytes 做其他處理
// bytes = DESUtil.decryptDES(bytes, DESUtil.DES_KEY);
resource = new TransformedResource(resource, bytes);
return resource;
}
}
3、啓動服務重新訪問地址欄,就可以查看自己對圖片資源處理的結果。本人的代碼裏限制了只處理jpg格式,自己看情況而定。
原創不易,如果對你有用記得點贊哦,就是對我創作好文章的最大鼓勵!!!
謝謝老闆!!!