目前我的图像存储在项目目录的/ src / main / resources / static / myimages中。现在我想将这些项目目录移到/ Users / tom / myimages之外,这样在HTML标记中的img标签src =“/ myimages / subdir / first.jpg”将从/ Users / tom / myimages /加载子目录/ first.jpg。如何在spring boot 2.0项目中实现这一目标?
这将允许我添加新图像,而无需在生产环境中重新编译项目。
你可以通过最简单的解析器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
文件也许你应该尝试定义自己的静态资源处理程序?
它将覆盖默认值。
像这样的东西:
@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);
}
}
从文档:
@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类型
上面的答案非常好。但是根据spring boot docs,正确的方法是这样做。你需要将以下属性添加到application.properties文件中
spring.resources.static-位置=文件:/首页/用户名/图片/
mvc静态路径模式不是必需的spring.mvc.static-path-pattern = / resources / **
http://localhost:8080/resources/exampleimage.png
我们提到的资源路径将添加到默认资源位置列表中