我只想简单问一下,当Spring Boot Web Application的JPA在数据库中保存数据或BLOB(使用@LOB)或字节数组数据时,什么是在数据库中保存图像的真实形式。 是要在数据库中保存整个字节数据 它将仅保存该字节数组对象的引用或地址,实际上将其保存到系统的文件空间中。
我想特别询问Spring Boot JPA Repository。 请解释一下。 如果要测试它的任何演示示例请提供
答案 0 :(得分:3)
转到此repository并转到Q1header
分支。基本方法如下:
在您拥有的实体中:
display-image-from-db
@Lob
private Byte[] image;
- 您通过ImageController.java
MultipartFile
调用@PostMapping("recipe/{id}/image")
public String handleImagePost(@PathVariable String id, @RequestParam("imagefile") MultipartFile file){
imageService.saveImageFile(Long.valueOf(id), file);
return "redirect:/recipe/" + id + "/show";
}
保存通过imageService
作为参数的图片。
该服务基本上将图像内容复制到字节数组,最后将此字节数组分配给您的实体。
file
对于完整的源代码,请转到repo,这肯定会有所帮助。 但是我强烈建议将文件存储在磁盘上,而不是存储在数据库中。 DB应该只存储文件的路径。对于这样的解决方案,这里有一个例子:link
答案 1 :(得分:1)
它将保存数据库中的所有字节,不会将其导出到文件系统并保存目录。你必须在代码中专门做那部分。
答案 2 :(得分:1)
要直接回答问题,内容将存储在数据库中。这可能,也可能不适合您。正如@dgarceran所提到的,有一堆优点和缺点。无论哪种方式,我都建议您查看Spring Content。
该项目提供内容/ BLOB的抽象。它是非结构化数据,Spring Data是结构化数据。它有支持JPA(BLOB),Filesystem,Mongo的GridFS和S3的模块。无论您选择哪个模块,它都将使您不必编写任何类似@ Ph03n1x提供的样板代码。
使用Spring Content,您需要创建一个ContentStore
接口,Spring Content将为您提供实现和控制器。实现是高效的,因为它将在客户端和数据库之间传输内容(而不是像Ph03n1x的示例那样将整个文件加载到内存中)。如果需要,抽象还可以在以后轻松更改存储模型。
HTH