Spring Boot JPA(Hibernate)如何保存图像

时间:2018-05-16 06:16:22

标签: java spring hibernate spring-boot jpa

我只想简单问一下,当Spring Boot Web Application的JPA在数据库中保存数据或BLOB(使用@LOB)或字节数组数据时,什么是在数据库中保存图像的真实形式。 是要在数据库中保存整个字节数据 它将仅保存该字节数组对象的引用或地址,实际上将其保存到系统的文件空间中。

我想特别询问Spring Boot JPA Repository。 请解释一下。 如果要测试它的任何演示示例请提供

3 个答案:

答案 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的示例那样将整个文件加载到内存中)。如果需要,抽象还可以在以后轻松更改存储模型。

有一个入门指南here和一个视频教程here

HTH