SpringBoot上传图片之后图片刷新不了,需要重新刷新服务器才能看到图片解决方法及其连锁反应

1.BUG原因

通过百度和其他大佬的博客,了解到了这是因为对服务器的保护措施导致的,服务器不能对外部暴露真实的资源路径,需要配置虚拟路径映射访问。

2.BUG解决

新建一个WebConfig类,实现自定义的资源映射函数addResourceHandlers。代码如下

@Configuration
public class WebConfig extends WebMvcConfigurationSupport {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {

        if(!registry.hasMappingForPattern("/static/**")){
            registry.addResourceHandler("/static/image/**").addResourceLocations("file:E:\\dst\\src\\main\\resources\\static\\image\\"); /*绝对路径*/
        }
        super.addResourceHandlers(registry);
    }

}

addResourceHandler()里配置需要映射的文件,
addResourceLocations()配置该文件的绝对路径。

3.新的BUG

当我兴冲冲的重启服务器时,然后悲哀的发现我的界面打不开了,报404错误。
SpringBoot上传图片之后图片刷新不了,需要重新刷新服务器才能看到图片解决方法及其连锁反应_第1张图片
在这里插入图片描述
这个错误是找不到页面。

4.解决方法

解决这个问题的办法就是在之前的WebConfig类中新增一个页面跳转的方法addViewControllers
代码如下:

 @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("index.html");
        registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
        super.addViewControllers(registry);
    }

5.又见新BUG

当我能重新进页面时,却发现页面加载不了JS,CSS等静态资源
SpringBoot上传图片之后图片刷新不了,需要重新刷新服务器才能看到图片解决方法及其连锁反应_第2张图片

6.BUG解决

经过一番查找资料,找到一个解决问题的方法,在WebConfig里面加上一下代码。

 private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {
            "classpath:/META-INF/resources/", "classpath:/resources/",
            "classpath:/static/", "classpath:/public/" };

if (!registry.hasMappingForPattern("/webjars/**")) {
            registry.addResourceHandler("/webjars/**").addResourceLocations(
                    "classpath:/META-INF/resources/webjars/");
        }
        if (!registry.hasMappingForPattern("/**")) {
            registry.addResourceHandler("/**").addResourceLocations(
                    CLASSPATH_RESOURCE_LOCATIONS);
        }

参考博客:

https://blog.csdn.net/qq_37756310/article/details/104070000

你可能感兴趣的:(Springboot,java,spring,boot,后端)