【已解决】SpringBoot图片更新需重启服务器才能显示

问题描述

1、更新头像,并跳转回列表页,发现显示不出来在这里插入图片描述
2、但是前端获取用户头像的信息是在加载页面就会被调用的,同时前端也不存在所谓的缓存问题,因为没有动这部分代码。
但查看响应是能获得正确的信息(前端打印图片路径,后端打印路径一致)
3、原地刷新不会有效果
4、重启服务器,再次查看发现正确加载了

问题分析

通过查资料与实践发现,这是由于服务器的自我保护机制导致的现象,为了防止暴露绝对路径

SpringBoot 把静态的文件在启动的时候都会加载到classpath的目录下的,package时把static目录下的资源一起打包到了jar包或war包中,此时上传的图片并未传入启动了的项目中,所以访问不到。项目重启后又会打成新的jar包,包含上一次上传的的图片,此时才会在页面上显示

简而言之,就是图片上传到的是src包下,不是tagert包下,但程序运行用的是target包下的代码

在这里插入图片描述

问题解决

对于上述问题,可以通过配置静态资源映射解决:
创建config包,创建对应的xxxxConfig类,实现WebMvConfigurer接口的addResourceHandlers方法
如果需要映射两个路径,类似于这样就可以

@Configuration
public class WebConfig implements WebMvcConfigurer {
@Value("${code_img_path_local}")
    private String codeImgPath;

    @Value("${avatar_path_local}")
    private String avatarPath;
/**
     * 映射外部图片路径
     *  解决更新图片后需要重启服务器才能解决的问题
     * @param registry
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/pic/captcha/**").addResourceLocations("file:"+codeImgPath);
        registry.addResourceHandler("/pic/avatar/**").addResourceLocations("file:"+avatarPath);
    }
}

在这里插入图片描述

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值