如何在Spring Boot 2.0 Web应用程序中为图像存储指定外部位置?

时间:2018-08-16 19:14:08

标签: spring image spring-boot

目前,我的图像存储在项目目录的/ src / main / resources / static / myimages中。现在,我想将这些移动到/ Users / tom / myimages中的项目目录之外,以便从/ Users / tom / myimages /中加载HTML标记中的img标签src =“ / myimages / subdir / first.jpg” subdir / first.jpg。如何在Spring Boot 2.0项目中实现这一目标?

这将允许我添加新图像,而不必在生产环境中重新编译项目。

4 个答案:

答案 0 :(得分:3)

也许您应该尝试定义自己的静态资源处理程序?

它将覆盖默认值。

类似这样的东西:

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

更新 在我的某些旧项目中似乎可以使用该功能:

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

  @Override
  public void addResourceHandlers(ResourceHandlerRegistry registry) {
    String myExternalFilePath = "file:///C:/Users/tom/imgs/";

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

    super.addResourceHandlers(registry);
  }

}

答案 1 :(得分:3)

您可以通过PathResourceResolver(最简单的解析器)来实现,其目的是在给定公共URL模式的情况下查找资源。实际上,这是默认解决方案。

代码:

@Configuration
@EnableWebMvc
public class MvcConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
       registry
               .addResourceHandler("/myimages/**")
               .addResourceLocations("/Users/tom/myimages")
               .setCachePeriod(3600)
               .resourceChain(true)
               .addResolver(new PathResourceResolver());
    }
} 

说明:

  • 我们正在资源链中将PathResourceResolver注册为其中唯一的ResourceResolver
  • PathResourceResolver一起在/first.jpg文件夹中找到/Users/tom/myimages文件的html代码

答案 2 :(得分:2)

Spring 5 - Static Resources

从文档中:

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

        public void addResourceHandlers (ResourceHandlerRegistry registry) {
            registry.addResourceHandler("/pages/**").
                      addResourceLocations("classpath:/my-custom-location/","C:/spark/Hadoop/my-custom-location/");


        }
}

或您可以将图像路径存储在数据库中。如有需要,可以动态地加载它,也可以随时更改该路径。

HTML代码将如下所示:-

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">


<link href='<spring:url value="/resources/css/style.css"/>' rel="stylesheet" />
<script type="text/javascript" src='<spring:url value="/resources/js/app.js"/>'></script>

</head>
<body>
   <h1 id="title" class="color1">Spring MVC- Static Resource Mapping Example</h1>

   <button onclick="changeColor()">Change Color</button>
   <hr />

   <img alt="http://mytechnologythought.blogspot.com" src="<spring:url value="/pages/img01.png"/>" width="200">
</body>
</html>

Here Full Example Reference Blog link 注意:-不推荐使用WebMvcConfigurerAdapter类型

答案 3 :(得分:0)

以上答案非常好。但是根据spring boot docs,正确的方法是。您需要在application.properties文件中添加以下属性

spring.resources.static-locations =文件:/ home / username / images /

不需要mvc静态路径模式 spring.mvc.static-path-pattern = / resources / **

http://localhost:8080/resources/exampleimage.png

我们提到的资源路径将添加到默认资源位置列表中

请阅读文档以获取更多信息 https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-spring-mvc-static-content