Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to insert images in mongoDB using java?

For storing binary data like images you can use GridFS or implement your own realization; Download the driver and look at src/test/com/mongodb/gridfs/GridFSTest.java ;)

Edit: you are lucky today! I made complete code for you;) Enjoy!

package mongodb.testing.java;
import com.mongodb.*;
import com.mongodb.gridfs.*;
import java.io.*;

public class Main {

    public static byte[] LoadImage(String filePath) throws Exception {
        File file = new File(filePath);
        int size = (int)file.length();
        byte[] buffer = new byte[size];
        FileInputStream in = new FileInputStream(file);
        in.read(buffer);
        in.close();
        return buffer;
    }

    public static void main(String[] args) throws Exception {
        //Load our image
        byte[] imageBytes = LoadImage("C:/Temp/bear.bmp");
        //Connect to database
        Mongo mongo = new Mongo( "127.0.0.1" );
        String dbName = "GridFSTestJava";
        DB db = mongo.getDB( dbName );
        //Create GridFS object
        GridFS fs = new GridFS( db );
        //Save image into database
        GridFSInputFile in = fs.createFile( imageBytes );
        in.save();

        //Find saved image
        GridFSDBFile out = fs.findOne( new BasicDBObject( "_id" , in.getId() ) );

        //Save loaded image from database into new image file
        FileOutputStream outputImage = new FileOutputStream("C:/Temp/bearCopy.bmp");
        out.writeTo( outputImage );
        outputImage.close();
    }
}

For small (<1mb) images I'd suggest storing them in a binary field (byte[] in java); if you have larger files GridFS will work better.

I store lots of thumbnails in my documents directly using a simple binary field.

I use Morphia (http://code.google.com/p/morphia) to store my POJOs.


Well, AFAIK, you cant store images in mongodb, you can store the links to images. And I am not high as I say this, if the images are small, like 100x100 px, U can try storing the image in binary, and reform and image on the fly. But, it will take some time to render the images, and hence I suggest you to save the link, and just fetch that image and populate it dynamically.

You can use GridFS to store larger binary objects.

Since you are new to mongoDB, take a look at:

Link 1

Link 2

Mongo+JAVA Tutorial

GridFS specs

You can also always ask on SO, I am also new to mongoDB, and wouldn't mind helping a newbie along :D