Подтвердить что ты не робот

Как использовать Spring Boot для обслуживания статического содержимого, находящегося в папке Dropbox?

У меня есть веб-приложение Spring Boot, и я хотел бы показывать статический контент, расположенный в общем каталоге Dropbox на моем Linode VPS (~/Dropbox/images). Я читал, что Spring Boot автоматически будет загружать статический контент из

"classpath:/META-INF/resources/",
"classpath:/resources/",
"classpath:/static/",
"classpath:/public/",

но, конечно, мой каталог Dropbox не находится в пути к классам.

Хотя я мог настроить Apache для работы с изображениями в моей папке Dropbox, я хотел бы воспользоваться преимуществами Spring Security, чтобы ограничить доступ к статическому контенту для аутентифицированных пользователей.

4b9b3361

Ответ 1

Вы можете добавить свой собственный обработчик статических ресурсов (он перезаписывает по умолчанию), например

@Configuration
public class StaticResourceConfiguration extends WebMvcConfigurerAdapter {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**").addResourceLocations("file:/path/to/my/dropbox/");
    }
}

В Spring Boot есть некоторая документация по этому поводу, но на самом деле это просто ванильная функция Spring MVC.

Также начиная с весенней загрузки 1.2 (я думаю) вы можете просто установить spring.resources.staticLocations.

Ответ 2

Springboot (через Spring) теперь упрощает добавление к существующим обработчикам ресурсов. См. ответ Дейва Сиерса. Чтобы добавить к существующим обработчикам статических ресурсов, просто не забудьте использовать путь обработчика ресурсов, который не переопределяет существующие пути.

Два примечания "еще" ниже остаются в силе.

. , .

[Изменить: приведенный ниже подход больше не действителен]

Если вы хотите расширить обработчики статических ресурсов по умолчанию, то похожее на это похоже:

@Configuration
@AutoConfigureAfter(DispatcherServletAutoConfiguration.class)
public class CustomWebMvcAutoConfig extends
                    WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter {

  @Override
  public void addResourceHandlers(ResourceHandlerRegistry registry) {
    String myExternalFilePath = "file:///C:/Temp/whatever/m/";

    registry.addResourceHandler("/m/**").addResourceLocations(myExternalFilePath);

    super.addResourceHandlers(registry);
  }

}

Вызов super.addResourceHandlers устанавливает обработчики по умолчанию.

также:

  • Обратите внимание на конечную косую черту во внешнем пути к файлу. (Зависит от вашего ожидания от сопоставления URL-адресов).
  • Рассмотрите возможность просмотра исходного кода WebMvcAutoConfigurationAdapter.

Ответ 3

На основе ответа @Dave Syers добавьте следующий класс в мой проект загрузки Spring:

@Configuration
public class StaticResourceConfiguration extends WebMvcConfigurerAdapter {

 private static final Logger LOG = LoggerFactory.getLogger(StaticResourceConfiguration.class);

 @Value("${static.path}")
 private String staticPath;

 @Override
 public void addResourceHandlers(ResourceHandlerRegistry registry) {

    if(staticPath != null) {
        LOG.info("Serving static content from " + staticPath);
        registry.addResourceHandler("/**").addResourceLocations("file:" + staticPath);
    }
 }

 // see https://stackoverflow.com/questions/27381781/java-spring-boot-how-to-map-my-my-app-root-to-index-html
 @Override
 public void addViewControllers(ViewControllerRegistry registry) {
    registry.addViewController("/").setViewName("redirect:/index.html");
 }
}

Это позволяет мне запустить мое загрузочное приложение Spring с параметром --static.path как

java -jar spring-app-1.0-SNAPSHOT.jar --static.path=/path/to/my/static-files/

Это может быть очень удобно для разработки и тестирования.

Ответ 4

Здесь есть свойство spring.resources.staticLocations, которое можно установить в application.properties. Обратите внимание, что это переопределит местоположение по умолчанию. См. org.springframework.boot.autoconfigure.web.ResourceProperties.

Ответ 5

@Марк Шефер

Никогда не поздно, но добавьте косую черту (/) после статического:

spring.resources.static-locations=file:/opt/x/y/z/static/

Так что http://<host>/index.html теперь доступен.

Ответ 6

Исходя из @Dave Syer, @kaliatech и @asmaier отвечают, что springboot v2+ будет выглядеть так:

@Configuration
@AutoConfigureAfter(DispatcherServletAutoConfiguration.class)
public class StaticResourceConfiguration implements WebMvcConfigurer  {

  @Override
  public void addResourceHandlers(ResourceHandlerRegistry registry) {
    String myExternalFilePath = "file:///C:/temp/whatever/m/";

     registry.addResourceHandler("/m/**").addResourceLocations(myExternalFilePath);

  }

}

Ответ 7

Служить из файловой системы

Я добавил spring.resources.static-location=file:../frontend/build в application.properties

index.html присутствует в папке build

Использование также может добавить абсолютный путь

spring.resources.static-location=file: /User/XYZ/Desktop/frontend/build

Я думаю, что аналогичным образом вы можете попробовать добавить путь к папке Dropbox.

Ответ 8

Для текущей версии Spring -Boot версии 1.5.3 параметр

spring.resources.static-locations

Обновление Я настроил

`spring.resources.static-локации = Файл:/OPT/х/у/г/static``

и ожидаем, что мой index.html будет жить в этой папке при вызове

http://<host>/index.html

Это не сработало. Мне нужно было указать имя папки в URL:

http://<host>/static/index.html

Ответ 9

FWIW, у меня не было никакого успеха с spring.resources.static-locations рекомендованным выше; у меня работало то, что я установил spring.thymeleaf.prefix:

report.location=file:/Users/bill/report/html/
spring.thymeleaf.prefix=${report.location}

Ответ 10

Обратите внимание, что WebMvcConfigurerAdapter устарела (см. WebMvcConfigurerAdapter). Из-за методов Java 8 по умолчанию вам нужно только реализовать WebMvcConfigurer.

Ответ 11

  • ОС: Win 10
  • Spring Boot: 2.1.2

Я хотел обслуживать статический контент из c: /images

Добавление этого свойства работало для меня:

spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,file:///C:/images/

Я нашел первоначальную стоимость имущества в приложении Spring A Boot Doc, Приложение A

Это сделает c: /images/image.jpg доступным как http://localhost: 8080/image.jpg

Ответ 12

Вы можете поместить свою папку в корень ServletContext.

Затем укажите относительный или абсолютный путь к этому каталогу в application.yml:

spring:
  resources:
    static-locations: file:some_temp_files/

Ресурсы в этой папке будут доступны (например, для загрузки) по адресу:

http://<host>:<port>/<context>/your_file.csv