如何使用 Vaadin 提供从外部文件夹上传的图像?

问题描述 投票:0回答:1

亲爱的大家,我正在使用 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);

我尝试使用绝对路径和相对路径,但似乎不起作用

有什么想法或提示吗?

upload mapping resources vaadin hilla
1个回答
0
投票

好吧,我找到了两种解决方案

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 覆盖或不再受支持?

希望这也能帮助其他有类似问题的人。

© www.soinside.com 2019 - 2024. All rights reserved.