场景:部署的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格式,自己看情况而定。
原创不易,如果对你有用记得点赞哦,就是对我创作好文章的最大鼓励!!!
谢谢老板!!!
场景:部署的Springboot项目,打成jar包,需要通过url直接访问jar外部路径的资源,本人的Springboot为2.1.11.RELEASE。一、配置WebMvcConfigurer,设置url访问静态资源映射@Configurationpublic class WebMvcConfig implements WebMvcConfigurer { /** ...
拦截器类 需要两个配合使用这里只有一个
@Configuration
public class ServletContextConfig extends WebMvcConfigurerAdapter {
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
registry.addResourceHandler("/templates/**").addResourceLocations("classpath:/templates/");
super.addResourceHandlers(registry);
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new HandlerMyInterceptorAdapter()).addPathPatterns("/**")
.excludePathPatterns("/")
// .excludePathPatterns("/expressions/getExpressionsList")
.excludePathPatterns("/loginInfo/getCordByIsPhone")
.excludePathPatterns("/loginInfo/login11") //token失效跳轉
.excludePathPatterns("/loginInfo/insertLoginInfo") //注册
.excludePathPatterns("/loginInfo/login") //登录
.excludePathPatterns("/upload") //上传文件
.excludePathPatterns("/uploadListen") //上传文件
.excludePathPatterns("/admin/user/goLogin") //后台跳转登录
.excludePathPatterns("/admin/user/login") //后台登录
.excludePathPatterns("/loginInfo/getLoginInfo") //忘记密码
.excludePathPatterns("/loginInfo/getCord") //短信验证码
.excludePathPatterns("/loginInfo/getIsLoginInfo") //判断验证码&&登录
.excludePathPatterns("/loginInfo/getIsLoginInfo1") //判断验证码
.excludePathPatterns("/loginInfo/setPassWord") //设置密码
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
@Component
public class HandlerMyInterceptorAdapter implements HandlerInterceptor {
@Autowired
private HeartbeatServiceImpl heartbeatService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException {
String url = request.getRequestURI();
if (url.contains("admin")) {
User user = (User) request.getSession().getAttribute("user");
try {
if (user.equals(null)) {
response.sendRedirect(serverConfig.SERVER + "admin/user/goLogin");
return false;
} else {
return true;
}catch (Exception e){
response.sendRedirect(serverConfig.SERVER + "admin/user/goLogin");
return false;
}else {
String token = request.getHeader("token");
if (token != null) {
Jedis jedis = new Jedis(com.sevenSteps.util.RedisConfig.HOST, RedisConfig.PORT);
String s = jedis.get(token);
if(token.equals(s)) {
heartbeatService = SpringUtil.getBean(HeartbeatServiceImpl.class);
return heartbeatService.setOutDate(token);
}else {
response.sendRedirect(serverConfig.SERVER + "loginInfo/login11");
return true;
}else {
response.sendRedirect(serverConfig.SERVER + "loginInfo/login11");
return true;
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object o, ModelAndView modelAndView) throws Exception {
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/imctemp-rainy/**").addResourceLocations("file:D:/E/");
设置静态资源路径
2. 表单 前端 页面
<input type="file" name="file" id="file">
<p id="
自定义资源映射addResourceHandlers:
在springboot中,我们可以通过重写addResourceHandlers方法来映射静态资源目录;
具体做法:编写类继承WebMvcConfigurerAdapter类,重写该类的addResourceHandlers方法;其中addResourceHandler指向映射路径,addResourceLocations指向资源文件路径;资...
在SpringBoot应用中,设置静态文件路径是非常常见的操作。如果你要在你的应用中使用静态资源,比如图片、css、js等,那么你就需要在静态资源文件夹中存放这些资源,在运行时加载这些资源以便于浏览器进行渲染。在SpringBoot2.0中,设置静态文件路径有多种方式,下面将详细介绍几种常用的方式。
1.在application.properties中配置
你可以直接在application.properties中配置静态文件路径,例如:
spring.resources.static-locations= classpath:/META-INF/resources/, classpath:/resources/, classpath:/static/, classpath:/public/
1)spring.resources.static-locations这个属性就是让你指定静态文件的根路径。
2)这里指定了四个classpath下的路径,顺序不能颠倒,其中"classpath:/META-INF/resources/"是Spring Boot2.0及以上版本新增的,用来存放一些公共的静态资源文件。
2.在WebMvcConfigurer中配置
你可以自定义一个WebMvcConfigurer的配置类,实现addResourceHandlers方法,例如:
@Configuration
public class MyWebMvcConfigurer implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**")
.addResourceLocations("classpath:/static/");
1)这里指定了资源处理器registry,并添加了一个资源路径"/static/**"。
2)该资源路径对应的是classpath:/static/路径,即静态资源文件夹。
3.在@Configuration类中配置
如果你想更加灵活的配置静态资源路径,可以通过@Configuration注解进行配置,例如:
@Configuration
public class WebStaticConfigurer {
@Value("${sba.static.path:''}")
private String staticPath;
@Bean
public WebMvcConfigurer webMvcConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// 配置静态资源路径
registry.addResourceHandler("/static/**")
.addResourceLocations(staticPath);
1)这里通过@Configuration注解定义了一个WebStaticConfigurer配置类,并进行了设置静态文件路径的操作,使得静态文件路径可以自行从配置文件中调取。
2)addResourceLocations(staticPath)中staticPath被值赋予"${sba.static.path:''}",说明staticPath从配置文件中取值。
以上就是SpringBoot2.0设置静态文件路径的几种方法,你可以根据实际的需求来选择适应的方法。无论使用哪种方法,只要你设置正确,就可以在应用中使用静态资源。