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

问题描述 投票:8回答:4

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

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

spring image spring-boot
4个回答
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
  • html代码,与PathResourceResolver一起,在/first.jpg文件夹中找到/Users/tom/myimages文件

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);
  }

}

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类型


0
投票

上面的答案非常好。但是根据spring boot docs,正确的方法是这样做。你需要将以下属性添加到application.properties文件中

spring.resources.static-位置=文件:/首页/用户名/图片/

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

© www.soinside.com 2019 - 2024. All rights reserved.