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

时间:2018-11-28 08:23:41

标签: java spring mapping

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

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

我发现函数addResourceHandlers似乎可以完全做到这一点,但是我很难实现它。首先,我不确定是扩展WebMvcConfigurationSupport还是WebMvcConfigurationAdapter或实现WebMvcConfigurer。似乎没有任何工作。 我也尝试了类似@EnableWebMvc等类的其他@ @-没有任何变化。 一些网站建议将Class移到与应用程序相同的程序包中-也不起作用。

我认为函数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时,仅返回白页,并且服务器日志中未显示任何消息。

1 个答案:

答案 0 :(得分:1)

我设法通过将两个类移到同一包中并按如下所示对其进行修改来使其工作:

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);
    }

}

还有ResourceProvider:

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/");
    }
}