网关解决访问服务器图片的问题

Spring MVC 访问图片

方法一:Java Config 配置类

配置类实现 WebMvcConfigurer 接口,覆盖 addResourceHandlers 方法
addResourceHandler(“/pics/**”) ----> 找以pics开头的文件
addResourceLocations(“file:e:/saveFiles/upload/”) ----> 从此文件夹中找以pics开头的文件

@Configuration
@EnableWebMvc
public class MVCConfig implements WebMvcConfigurer {
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/pics/**").addResourceLocations("file:e:/saveFiles/upload/");
    }
}
方法二:配置xml文件
<mvc:default-servlet-handler />

<mvc:resources mapping="/pics/**" location="file:e:/saveFiles/upload/" />

网关解决访问服务器图片的问题

Spring Cloud Gateway 是基于 Spring WebFlux 解决访问图片的问题。

内置资源访问顺序
自定义访问

创建一个配置类,实现 WebFluxConfigurer 接口的 addResourceHandlers方法

@Configuration
public class GatewayWebFluxConfig implements WebFluxConfigurer {

    @Autowired
    ImageProperties imageProperties;

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
    	// 找以/files开头的文件
        String mapping = imageProperties.getMapping().endsWith("/") ? imageProperties.getMapping() + "**" : imageProperties.getMapping() + "/**";
        // 从 location 这个位置寻找文件
        String location = imageProperties.getLocation().endsWith("/") ? "file:" + imageProperties.getLocation() : "file:" + imageProperties.getLocation() + "/";
        registry.addResourceHandler(mapping).addResourceLocations(location);
    }
}

以下是在 Nacos 配置中心配置图片存放在服务器端的位置
在这里插入图片描述

遇到的问题:这样配置完之后,配置类 GatewayWebFluxConfig 中注入的imageProperties 对象并不能接收到数据*

此时,需要使用 Nacos 共享配置。共享配置我理解的是引入文件。

Nacos 共享配置

配置 bootstrap.xml

server:
  port: 8080

spring:
  application:
    name: gateway-service
  profiles:
    active: dev
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        namespace: et2405
      config:
        namespace: ${spring.cloud.nacos.discovery.namespace}
        file-extension: yml
        # nacos 共享配置
        shared-configs:
          # List<Config> 
          # 引入 upload-service-dev.yml
          # refresh:自动刷新 
          - { data-id: upload-service-dev.yml, refresh: true }

Nacos 共享配置之后,配置类 GatewayWebFluxConfig 中注入的imageProperties 对象能接收到数据。
如果不使用 Nacos 共享配置,只能每次重启微服务。

微服务共享的配置可以统一交给Nacos保存和管理,在Nacos控制台修改配置后,Nacos会将配置变更推送给相关的微服务,并且无需重启即可生效,实现配置热更新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值