【问题标题】:Store large Image Files coded as base64 in MongoDB在 MongoDB 中存储编码为 base64 的大型图像文件
【发布时间】:2020-05-28 12:58:39
【问题描述】:

我使用带有 mongoDB 作为存储的 Spring Boot 应用程序,并希望存储编码为 base64 字符串的大型图像文件。据我所知,mongoDB 最多只能存储 16MB 的文件,所以我必须使用 gridfs。在多个页面和教程中,它们存储文件,但我从未找到使用 gridfs 存储对象的示例。

基本示例:

public class Student {

private String firstName;
private String lastName;
private String image;

public String getFirstName() {
    return firstName;
}
public void setFirstName(String firstName) {
    this.firstName = firstName;
}
public String getLastName() {
    return lastName;
}
public void setLastName(String lastName) {
    this.lastName = lastName;
}
public String getImage() {
    return image;
}
public void setImage(String image) {
    this.image = image;
}
}

我是否必须像这里提到的那样将图像值单独存储为 inputStream:

https://www.baeldung.com/spring-boot-mongodb-upload-file

或者还有其他方法吗?

【问题讨论】:

  • MongoDB 可以存储巨大的文件(如果需要,可以存储 TB)。您不需要将图像序列化为 Base64 字符串,因为 GridFS 接受原始文件并存储在名为块的小部分中。如果您仍然需要存储为 Base64,则需要将您的 Object 转换为 Stream 并调用相应的方法

标签: mongodb image spring-boot gridfs


【解决方案1】:

您可以使用 gridfs 存储元数据

如果您想存储完整的对象,请按照以下步骤操作:

  1. 只在 gridfs 中存储文件,它将返回一个引用 ID
  2. 将引用的 id 添加到您的对象并将其存储到 mongoDB 的不同文档中

【讨论】:

  • 感谢您的回答。这对我有用。但是我如何保证文件不会被重复存储?是否可以区分结果?
  • 如果此解决方案对您有用,那么请接受我的回答,对于保存一次的单个 gridfs id 文档,它不会存储重复项
猜你喜欢
  • 2022-11-30
  • 1970-01-01
  • 2018-08-28
  • 2018-12-20
  • 2018-09-25
  • 1970-01-01
  • 2016-04-04
  • 2016-09-18
  • 2023-03-11
相关资源
最近更新 更多