Ich habe eine Spring Boot-Webanwendung und möchte statischen Inhalt bereitstellen, der sich in einem freigegebenen Dropbox-Verzeichnis auf meinem Linode VPS befindet (~ / Dropbox / images). Ich habe gelesen, dass Spring Boot automatisch statischen Inhalt von bereitstellt
"classpath:/META-INF/resources/",
"classpath:/resources/",
"classpath:/static/",
"classpath:/public/",
Aber natürlich befindet sich mein Dropbox-Verzeichnis nicht im Klassenpfad.
Obwohl ich Apache so konfigurieren könnte, dass die Bilder in meinem Dropbox-Ordner bereitgestellt werden, möchte ich Spring Security nutzen, um den Zugriff auf den statischen Inhalt auf authentifizierte Benutzer zu beschränken.
quelle
Springboot (über Spring) erleichtert jetzt das Hinzufügen zu vorhandenen Ressourcenhandlern. Siehe Dave Syers Antwort . Verwenden Sie zum Hinzufügen zu den vorhandenen statischen Ressourcenhandlern einfach einen Ressourcenhandlerpfad, der vorhandene Pfade nicht überschreibt.
Die beiden folgenden "auch" Hinweise sind weiterhin gültig.
. . .
[Bearbeiten: Der folgende Ansatz ist nicht mehr gültig]
Wenn Sie die Standardhandler für statische Ressourcen erweitern möchten, scheint Folgendes zu funktionieren:
@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); } }
Der Aufruf zum
super.addResourceHandlers
Einrichten der Standardhandler.Ebenfalls:
quelle
Basierend auf der Antwort von @Dave Syers füge ich meinem Spring Boot-Projekt die folgende Klasse hinzu:
@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 /programming/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"); } }
Dadurch kann ich meine Spring Boot App mit dem Parameter
--static.path
like startenjava -jar spring-app-1.0-SNAPSHOT.jar --static.path=/path/to/my/static-files/
Dies kann sehr praktisch für die Entwicklung und das Testen sein.
quelle
@ Mark Schäfer
Nie zu spät, aber
/
nach statischer Aufladung einen Schrägstrich ( ) hinzufügen :spring.resources.static-locations=file:/opt/x/y/z/static/
So
http://<host>/index.html
ist jetzt erreichbar.quelle
Ich wollte statische Inhalte aus c: / images bereitstellen
Das Hinzufügen dieser Eigenschaft hat bei mir funktioniert:
spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,file:///C:/images/
Ich habe den ursprünglichen Wert der Eigenschaft im Spring Boot Doc Anhang A gefunden
Dadurch kann auf c: /images/image.jpg als http: // localhost: 8080 / image.jpg zugegriffen werden
quelle
Es gibt eine Eigenschaft
spring.resources.staticLocations
, die in der festgelegt werden kannapplication.properties
. Beachten Sie, dass dadurch die Standardspeicherorte überschrieben werden. Sieheorg.springframework.boot.autoconfigure.web.ResourceProperties
.quelle
Basierend auf den Antworten von @Dave Syer, @kaliatech und @asmaier lautet der Weg für 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); } }
quelle
@AutoConfigureAfter(DispatcherServletAutoConfiguration.class)
Das Hinzufügen rettete meinen Tag. DankeVom Dateisystem aus bedienen
Ich habe
spring.resources.static-location=file:../frontend/build
inapplication.properties
index.html
ist imbuild
Ordner vorhandenVerwendung kann auch absoluten Pfad hinzufügen
spring.resources.static-location=file:/User/XYZ/Desktop/frontend/build
Ich denke, in ähnlicher Weise können Sie versuchen, den Dropbox-Ordnerpfad hinzuzufügen.
quelle
Für die aktuelle Spring-Boot Version 1.5.3 lautet der Parameter
spring.resources.static-locations
Update habe ich konfiguriert
`spring.resources.static-location = file: / opt / x / y / z / static``
und erwartet, dass meine index.html beim Aufruf in diesem Ordner lebt
http://<host>/index.html
Das hat nicht funktioniert. Ich musste den Ordnernamen in die URL aufnehmen:
http://<host>/static/index.html
quelle
FWIW, ich hatte keinen Erfolg mit den
spring.resources.static-locations
oben empfohlenen; Was für mich funktioniert hat, war das Setzen von spring.thymeleaf.prefix:report.location=file:/Users/bill/report/html/ spring.thymeleaf.prefix=${report.location}
quelle
Beachten Sie, dass WebMvcConfigurerAdapter jetzt veraltet ist (siehe WebMvcConfigurerAdapter ). Aufgrund der Java 8-Standardmethoden müssen Sie nur WebMvcConfigurer implementieren .
quelle
Sie können Ihren Ordner im Stammverzeichnis des ServletContext ablegen.
Geben Sie dann in application.yml einen relativen oder absoluten Pfad zu diesem Verzeichnis an:
spring: resources: static-locations: file:some_temp_files/
Die Ressourcen in diesem Ordner sind verfügbar (zum Beispiel zum Herunterladen) unter:
http://<host>:<port>/<context>/your_file.csv
quelle