• 【已解决】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);
        }
    }
    

    在这里插入图片描述

  • 相关阅读:
    结构体(Struct)
    es 用户启动elasticsearch
    谨慎redis的timeout参数
    C++Day4
    基于SpringBoot+Mybatis+layui的学生成绩管理系统
    多线程理论基础
    MindSpore运行模式与PyNative内存调优分析
    2023品牌新媒体矩阵营销洞察报告:流量内卷下,如何寻找增长新引擎?
    OptiMode应用矢量有限元法模拟表面等离子体激元
    Java-IO流之字节输入流(中篇)
  • 原文地址:https://blog.csdn.net/moteandsunlight/article/details/139886244