gpt4 book ai didi

java - 使用 Spring Boot 动态更改静态内容

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:39:11 25 4
gpt4 key购买 nike

现在我有一个简单的 Spring Boot 应用程序,它提供放置在 resources/static/img 中的静态图像。这对于显示实际内容来说效果很好,但有两件事我想解决:

  1. 我不希望将这些图像中的任何一个与生成的 .jar 文件捆绑在一起,而且我知道将这些图像放在 resources 文件夹中会那样做。

  2. 使用我当前的设置,为了在 webapp 上看到新图像,我必须将它添加到文件夹并重新启动它。相反,我希望 Spring 为特定文件夹中存在的任何静态内容提供服务,这样我就可以在应用程序运行时添加图像,并让它们在 localhost:8080/img/{image name} 自动提供.

我试图通过设置资源处理程序来解决这个问题,但我不确定这与简单地从 resources/static 提供服务是否有任何不同。不幸的是,我仍然在努力正确配置它,因为我根本看不到任何图像。这是我尝试过的:

@Configuration
public class StaticResourceConfiguration extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/img/**").addResourceLocations("file:" + Application.IMAGE_DIR);
super.addResourceHandlers(registry);
}
}

这是我的应用程序配置:

@SpringBootApplication
public class Application extends SpringBootServletInitializer {

static String IMAGE_DIR;

@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}

public static void main(String[] args) throws IOException {
SpringApplication.run(Application.class, args);
IMAGE_DIR = new File(".").getCanonicalPath() + "/img/";
}

}

同样,我的目标是在我的项目根目录中设置一个名为 img 的文件夹,它将存储我希望 webapp 在 localhost:8080/img 上提供的图像/{图像名称}。如果可能,我希望能够在应用程序运行时向该文件夹添加内容,并让 Spring 自动为它们提供服务,而无需重新启动它。

有人有什么想法吗?提前致谢。

最佳答案

您的方法的问题是您在运行 spring boot 应用程序后设置 IMAGE_DIR 并且常量 IMAGE_DIR 未初始化并且为 null .更改如下:

public static void main(String[] args) throws IOException {
IMAGE_DIR = "/opt/img/";
SpringApplication.run(Application.class, args);
}

并删除所有与 File(".").getCanonicalPath() 相关的内容,它将起作用。当您在所选目录中有新图像可以提供时,您的方法将满足您的需求。

关于java - 使用 Spring Boot 动态更改静态内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36288643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com