gpt4 book ai didi

Java Spring 访问应用程序外部的静态资源

转载 作者:行者123 更新时间:2023-11-30 05:53:38 25 4
gpt4 key购买 nike

我想让我的用户上传图像,然后将其存储在服务器上。由于将这些图像放入应用程序资源/静态文件夹中会在每次新部署时删除它们,因此我想在 Spring 应用程序之外存储和访问这些图像。

我仍然需要在我的 html-Context 中显示图像,所以我想做的是将路径(例如“userimages”)映射到我的应用程序之外的位置(例如“/home/userimages/”)当调用 url localhost:8080/userimages/hi.jpg 时,返回/home/userimages/hi.jpg 中的图像。

我发现函数 addResourceHandlers 似乎能够完全做到这一点,但我在实现它时遇到了困难。对于初学者,我不确定是否扩展 WebMvcConfigurationSupport 或 WebMvcConfigurationAdapter 或实现 WebMvcConfigurer。似乎没有一个起作用。我还尝试了在该类之上使用不同的 @,例如 @EnableWebMvc 等 - 没有任何改变。一些网站建议将类移动到与应用程序相同的包中 - 也不起作用。

我认为函数 addResourceHandlers 甚至没有被调用,而且我不知道如何确保它被调用。这是目前我的代码:

package global;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
@EnableWebMvc
public class StaticResourceProvider implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//This never gets printed
System.out.print("Adding resource handler");
registry
.addResourceHandler("/user-images/**")
//for Unix: file:/opt/files
//TODO: use path variable here
.addResourceLocations("file:///C:/Users/Juliette/Pictures/");
}
}

以及我的应用程序的入口点:

package controller;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

@SpringBootApplication
public class Application extends SpringBootServletInitializer {

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

public static void main(String[] args) {
//TODO: remove the first array element and read it as the name of this instance
SpringApplication.run(Application.class, args);
}

}

有人可以告诉我我的错误是什么吗?目前,当我访问 localhost:8080/user-images/nameOfSomeImage.jpg 时,仅返回一个白色页面,并且服务器日志中没有显示任何消息。

最佳答案

我现在成功地通过将两个类移到同一个包中并对其进行如下修改来使其工作:

package controller;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

public static void main(String[] args) {
//TODO: remove the first array element and read it as the name of this instance
SpringApplication.run(Application.class, args);
}

}

和资源提供者:

package controller;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class StaticResourceProvider implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry
.addResourceHandler("/css/**")
.addResourceLocations("classpath:/static/css/");

registry
.addResourceHandler("/js/**")
.addResourceLocations("classpath:/static/js/");

registry
.addResourceHandler("/img/**")
//for Unix: file:/opt/files
//TODO: use path here
.addResourceLocations("file:///C:/Users/Juliette/Pictures/");
}
}

关于Java Spring 访问应用程序外部的静态资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53515014/

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