我当前正在处理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>
答案 0 :(得分:1)
您不应在源文件夹中进行更改。我不确定100%,但是我认为IntelliJ将使用test_labels.csv
作为类路径,并在编译期间将文件复制到那里。 Spring Boot将加载它在类路径中找到的任何.../target/classes/
文件夹。
因此,您可以在此处覆盖文件,而不是在/static
下覆盖文件。这将一直有效,直到IntelliJ决定在编译或执行.../src/main/resources
期间覆盖它们为止。
此外,如果您独立运行Spring Boot应用程序,资源将位于jar文件中,因此将其用作动态存储不是一个好主意。
最好为动态存储创建一个单独的文件夹,并将其配置如下:
mvn clean install
答案 1 :(得分:0)
因此,终于在三天后,我找到了解决该问题的方法。
由于resources\static\images\
的位置是关于静态内容的,并且通常来说,将上传的(动态)内容保存在应用程序中是个坏主意。因此,我在resources
文件夹之外创建了一个文件夹,并放置了所有上传的(动态)图像文件。
这是我解决此问题的方法。 创建一个新类,然后尝试这个。
@Configuration
public class ResourceWebConfiguration implements WebMvcConfigurer {
@Override
public void addResourceHandlers(final ResourceHandlerRegistry registry) {
registry.addResourceHandler("/images/**").addResourceLocations("file:images/");
}
}