3

我有一个文件要存储在 mongoDB 中。我想要的是避免加载整个文件(可能是几 MB 大小),而是我想打开流并将其定向到 mongoDB 以保持写入操作的性能。我不介意将内容存储在 base64 编码的字节 [] 中。

之后我想在读取文件时做同样的事情,即不要将整个文件加载到内存中,而是在流中读取它。

我目前正在将 hibernate-ogm 与 Vertx 服务器一起使用,但如果它有效地解决了问题,我愿意切换到不同的 api。

我想实际存储一个包含多个字段和多个附件的文档。

4

1 回答 1

3

您可以使用GridFS。特别是当您需要存储较大的文件 (>16MB) 时,推荐使用以下方法:

File f = new File("sample.zip");
GridFS gfs = new GridFS(db, "zips");
GridFSInputFile gfsFile = gfs.createFile(f);
gfsFile.setFilename(f.getName());
gfsFile.setId(id);
gfsFile.save();

或者,如果您有 InputStream in

GridFS gfs = new GridFS(db, "zips");
GridFSInputFile gfsFile = gfs.createFile(in);
gfsFile.setFilename("sample.zip");
gfsFile.setId(id);
gfsFile.save();

您可以使用以下方法之一加载文件GridFS.find

GridFSDBFile gfsFile = gfs.findOne(id);
InputStream in = gfsFile.getInputStream();
于 2016-03-22T10:36:37.867 回答