ResourceHandlerRegistry的addResourceLocations方法设置linux路径,访问项目外图片,亲测可行

场景:部署的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格式,自己看情况而定。

 

原创不易,如果对你有用记得点赞哦,就是对我创作好文章的最大鼓励!!!

谢谢老板!!!

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值