目前,我的图像存储在项目目录的/ 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项目中实现这一目标?
这将允许我添加新图像,而不必在生产环境中重新编译项目。
答案 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)
从文档中:
@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
我们提到的资源路径将添加到默认资源位置列表中