添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
好帅的土豆  ·  健康科普堂 | ...·  1 年前    · 
温柔的西瓜  ·  BBA都没上榜 ...·  2 年前    · 

场景:部署的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设置静态文件路径的几种方法,你可以根据实际的需求来选择适应的方法。无论使用哪种方法,只要你设置正确,就可以在应用中使用静态资源。