使用Java将流写入mongoDB

时间:2016-03-22 10:26:51

标签: java mongodb streaming hibernate-ogm vertx3

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

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

我目前正在使用带有Vertx服务器的hibernate-ogm,但如果能有效地为原因服务,我可以切换到不同的api。

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

1 个答案:

答案 0 :(得分:2)

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