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错误。
在这里插入图片描述
在这里插入图片描述
这个错误是找不到页面。

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等静态资源
在这里插入图片描述

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值