亲爱的大家,我正在使用 Vaadin v24 并创建了图像上传功能。我知道如何使用 Vaadin 资源类读取和提供单个图像,但我想知道如何配置 Vaadin Servlet 以将特定图像 URL(如
/media/**
)处理和映射到文件系统外部的外部文件夹项目或部署的 jar。
我尝试注册一个 ResourceHandler 但不确定这是否适用于 Vaading,因为它似乎与 Spring MVC 框架相关。注册表的设置被调用,但随后 Vaadin Servlet 不再提供图像。
备注:我知道我可以使用前端 Web 服务器在 Spring Boot Tomcat 之外执行此操作,但出于开发目的,让一个服务器实例提供所有服务会更容易。
@Configuration
public class MyConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/media/**")
.addResourceLocations("file:./media/")
.setCachePeriod(3600);
registry.setOrder(Integer.MAX_VALUE);
我尝试使用绝对路径和相对路径,但似乎不起作用
有什么想法或提示吗?
好吧,我找到了两种解决方案
1。使用属性
vaadin.exclude-urls
与 WebMvcConfigurer.addResourceHandlers()
在您的 application.properties 中,确保指定您不希望 VaadinServlet 处理的模式
vaadin.exclude-urls=/media/***
之后在 Spring Boot 配置类中指定您的附加资源处理程序
@Configuration
public class MyConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/media/**")
.addResourceLocations("file:./media/")
.setCachePeriod(3600);
registry.setOrder(Integer.MAX_VALUE);
}
...
2。利用
RouterFunction
这似乎是一种新的方法,主要与WebFlux结合使用。然而,这似乎也适用于其他情况。目前它也可以在不指定任何
vaadin.exclude-urls
的情况下工作。只需创建一个以下类型的 Bean:
@Configuration
public class MyConfig {
@Bean
public RouterFunction<ServerResponse> mediaRouter() {
return RouterFunctions
.resources("/media/**", new FileSystemResource("./media/"));
}
...
以下方法没有工作
添加属性
spring.resources.static-locations=file:./media/
,即添加到 application.properties 中。我认为它可能会被 Vaadin 覆盖或不再受支持?
希望这也能帮助其他有类似问题的人。