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会将配置变更推送给相关的微服务,并且无需重启即可生效,实现配置热更新。