Статические ресурсы Java Spring Access вне приложения - PullRequest
0 голосов
/ 28 ноября 2018

Я хочу, чтобы мои пользователи могли загружать изображения, которые затем сохраняются на сервере.Поскольку размещение этих изображений в папке ресурсов ресурсов / static-папок приведет к их удалению при каждом новом развертывании, которое я хочу сохранить и получить доступ к этим изображениям вне моего приложения Spring.

Мне все еще нужно отображать изображения в моем html-Контекст, поэтому я пытаюсь сопоставить путь (например, «userimages») с местоположением за пределами моего приложения (например, «/ home / userimages /»), чтобы при отображении URL localhost: 8080 / userimages / hi.jpgвызвано изображение из /home/userimages/hi.jpg.

Я нашел функцию addResourceHandlers, которая, кажется, в состоянии сделать именно это, но у меня возникают проблемы с ее реализацией. Для начала я не уверен,расширить WebMvcConfigurationSupport или WebMvcConfigurationAdapter или реализовать WebMvcConfigurer. Кажется, ни один из них не работает. Я также пробовал использовать различные @ над этим классом, такие как @EnableWebMvc и т. д. - ничего не изменилось. Некоторые сайты предлагали перенести класс в тот же пакет, что и приложение - также не сделалит работы.

Я думаю, чтоt функция 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 голосов
/ 28 ноября 2018

Мне удалось заставить его работать сейчас, переместив оба класса в один и тот же пакет и изменив их следующим образом:

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/");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...