Spring: обслуживание статических ресурсов вне корневого контекста - PullRequest
24 голосов
/ 28 марта 2011

в веб-приложении мне нужно обслуживать статическое содержимое (изображения), расположенное вне каталога контекста приложения. Общая архитектура приложения требует от меня использования Tomcat для этого. Я подумал, что смогу воспользоваться Spring * <mvc:resources> для настройки сопоставления между URL-адресами приложений и содержимым каталогов. Но AFAIK это атрибут mapping, который обрабатывает только сопоставления контекста или пути к классам. Следовательно, что я хотел бы использовать:

<mvc:resources location="/images/**" mapping="/absolute/path/to/image/dir"/>

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

Большое спасибо.

Гомер

Ответы [ 2 ]

34 голосов
/ 28 марта 2011

<mvc:resources> может обслуживать ресурсы извне, вам нужно использовать обычный Синтаксис пути ресурса Spring :

<mvc:resources mapping="/images/**" location="file:/absolute/path/to/image/dir/"/> 
2 голосов
/ 30 декабря 2014

Есть еще одно простое исправление

код должен быть

<mvc:resources mapping="/images/**" location="file:/absolute/path/to/image/dir/"/>

Вы заметили разницу? Вам нужно поставить '/' в конце абсолютного пути.

или вы можете использовать конфигурацию Java

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    String rootPath = System.getProperty("user.home");
    String imagePath = "file:"+rootPath + File.separator + "tmpFiles/";
    System.out.println(imagePath);
    registry.addResourceHandler("/resources/**").addResourceLocations("resources/");
    registry.addResourceHandler("/tmpFiles/**").addResourceLocations(imagePath);
}

Это работает для меня.

...