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

之后,我想在读取文件时执行相同的操作,即不将整个文件加载到内存中,而是在流中读取它。

我目前正在将hibernate-ogm与Vertx服务器一起使用,但是如果它可以有效地处理原因,我愿意切换到其他api。

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

最佳答案

您可以使用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();

08-07 04:18