Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Write stream into mongoDB in Java

I have a file to store in mongoDB. What I want is to avoid loading the whole file (which could be several MBs in size) instead I want to open the stream and direct it to mongoDB to keep the write operation performant. I dont mind storing the content in base64 encoded byte[].

Afterwards I want to do the same at the time of reading the file i.e. not to load the whole file in memory, instead read it in a stream.

I am currently using hibernate-ogm with Vertx server but I am open to switch to a different api if it servers the cause efficiently.

I want to actually store a document with several fields and several attachments.

like image 977
Obaid Maroof Avatar asked Nov 29 '25 16:11

Obaid Maroof


1 Answers

You can use GridFS. Especially when you need to store larger files (>16MB) this is the recommended method:

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();

Or in case you have an InputStream in:

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

You can load a file using one of the GridFS.find methods:

GridFSDBFile gfsFile = gfs.findOne(id);
InputStream in = gfsFile.getInputStream();
like image 60
Sebastian Avatar answered Dec 02 '25 06:12

Sebastian



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!