我目前正在开发一个 Spring Boot 项目,同时上传在
resources\static\images
中创建的图像,但是当我尝试显示图像时,它没有显示。刷新文件夹后,它就会反映出来。
这是我的代码:
// Method for uploading image.
public void uploadImage(MultipartFile file) {
byte[] bytes = new byte[0];
try {
bytes = file.getBytes();
} catch (IOException e) {
e.printStackTrace();
}
BufferedOutputStream stream = null;
try {
stream = new BufferedOutputStream(new FileOutputStream(new File(
"D:\\New Language\\Spring Boot Demo\\employee_details\\src\\main\\resources\\static\\images"
+ File.separator + file.getOriginalFilename())));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
stream.write(bytes);
stream.flush();
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
// JSP Code For displaying image.
<div class="card-header border-0">
<img src="/images/${emp.path}" alt="My Image">
</div>
您不应在源文件夹中更改它。我不是 100% 确定,但我认为 IntelliJ 将使用
.../target/classes/
作为类路径,并在编译期间将文件复制到那里。 Spring Boot 将加载它在类路径中找到的任何 /static
文件夹。
因此您可以覆盖那里的文件,而不是在 .../src/main/resources
下。这将一直有效,直到 IntelliJ 决定在编译期间覆盖它们或执行 mvn clean install
。
此外,如果您独立运行 Spring Boot 应用程序,资源将位于 jar 文件内,因此用作动态存储并不是一个好主意。
最好单独创建一个文件夹用于动态存储,配置如下:
spring.resources.static-locations=classpath:/static/,file:/D:/...
当然,如果您在运行时更新该文件夹,它就不再是真正静态的了。另请检查https://www.baeldung.com/spring-mvc-static-resources
所以三天后我终于找到了这个问题的解决方案。 由于
resources\static\images\
地方是关于静态内容的,并且由于将上传的(动态)内容保存在应用程序中通常是一个坏主意。因此,我在 resources
文件夹之外创建了一个文件夹,并放置所有上传的(动态)图像文件。
这是我解决这个问题的方法。 创建一个新类并尝试这个。
@Configuration
public class ResourceWebConfiguration implements WebMvcConfigurer {
@Override
public void addResourceHandlers(final ResourceHandlerRegistry registry) {
registry.addResourceHandler("/images/**").addResourceLocations("file:images/");
}
}