web-dev-qa-db-fra.com

Comment insérer des images dans mongoDB en utilisant Java?

Je souhaite stocker des documents image dans MongoDB. J'utilise Java.

Tout lien ou suggestion serait apprécié.

41
user405398

Pour stocker des données binaires comme des images, vous pouvez utiliser GridFS ou implémenter votre propre réalisation; Téléchargez le pilote et regardez src/test/com/mongodb/gridfs/GridFSTest.Java;)

Edit: vous avez de la chance aujourd'hui! J'ai fait le code complet pour vous;) Profitez-en!

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();
    }
}
43
Edward83

Pour les petites images (<1 Mo), je suggère de les stocker dans un champ binaire (octet [] en Java); si vous avez des fichiers plus volumineux, GridFS fonctionnera mieux.

Je stocke beaucoup de vignettes dans mes documents directement à l'aide d'un simple champ binaire.

J'utilise Morphia (http://code.google.com/p/morphia) pour stocker mes POJO.

5
Scott Hernandez

Eh bien, AFAIK, vous ne pouvez pas stocker d'images dans mongodb, vous pouvez stocker les liens vers les images. Et je ne suis pas haut comme je le dis, si les images sont petites, comme 100x100 px, U peut essayer de stocker l'image en binaire, et de la reformer et de l'image à la volée. Mais, cela prendra un certain temps pour rendre les images, et donc je vous suggère de sauvegarder le lien, de simplement récupérer cette image et de la remplir dynamiquement.

Vous pouvez utiliser GridFS pour stocker des objets binaires plus volumineux.

Puisque vous êtes nouveau sur mongoDB, jetez un œil à:

Lien 1

Lien 2

Tutoriel Mongo + Java

Spécifications GridFS

Vous pouvez également toujours demander sur SO, je suis également nouveau sur mongoDB, et cela ne me dérangerait pas d'aider un débutant: D

2
theTuxRacer