41 votes

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

Je veux stocker des documents image dans MongoDB. J'utilise java.

Tout lien ou suggestion serait apprécié.

44voto

Edward83 Points 1894

Pour stocker des données binaires telles que des images, vous pouvez utiliser la fonction GridFS ou de mettre en œuvre votre propre réalisation ; Téléchargez le conducteur et regarder src/test/com/mongodb/gridfs/GridFSTest.java ;)

Edit : vous avez de la chance aujourd'hui ! J'ai fait le code complet pour vous ;) 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();
    }
}

0 votes

Merci pour votre code. J'ai aussi fait un code pour le même processus. Mais le vôtre est plus simple que le mien !!!

0 votes

Donc, pour écrire dans un fichier HTML, il faut indiquer l'emplacement de l'image sur le serveur dans le fichier HTML.

0 votes

Merci beaucoup, en particulier pour la méthode "LoadImage".

5voto

Scott Hernandez Points 4300

Pour les petites images (<1mb), je suggérerais de les stocker dans un champ binaire (byte[] en java) ; si vous avez de plus gros fichiers, GridFS fonctionnera mieux.

Je stocke beaucoup de vignettes dans mes documents en utilisant directement un simple champ binaire.

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

0 votes

Je vais stocker beaucoup d'images dans Mongo. Aussi bien des vignettes que des images de taille normale. Est-ce que pojo est indispensable pour moi ? !!!!

0 votes

Pouvez-vous me dire comment vous représentez les images dans Mongo. Par exemple, { "x":1, "y":2 } comment représentez-vous les images ? ? ???

0 votes

Comment stockez-vous vos images ? Tout dans un document ? ou des documents séparés dans une collection ? ou si je veux stocker plusieurs images dans un document qui ressemble à ceci { "name" : "Tamil", "age" : 23, "Images"{"image1" : 123.jpg, "image2": abc.jpg}} comment puis-je le faire avec java

2voto

theTuxRacer Points 4372

Eh bien, AFAIK, vous ne pouvez pas stocker des images dans mongodb vous pouvez stocker les liens vers les images. Et je ne suis pas hautain en disant cela, si les images sont petites, comme 100x100 px, vous pouvez essayer de stocker l'image en binaire, et reformer 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, et juste aller chercher cette image et la remplir dynamiquement.

Vous pouvez utiliser GridFS pour stocker des objets binaires de plus grande taille.

Puisque vous êtes novice en matière de mongoDB, jetez un coup d'œil à :

Lien 1

Lien 2

Tutoriel Mongo+JAVA

Spécifications de GridFS

Vous pouvez également poser des questions sur SO, je suis également novice dans le domaine de MongoDB, et cela ne me dérangerait pas d'aider un novice :D

0 votes

Comment lier un fichier GridFS avec un document simple dans mongodb. Disons que je télécharge une grande image et que je la stocke dans GridFS. Je sauvegarde les autres détails du fichier dans un document dans une collection. Comment puis-je récupérer l'image associée, lorsque je lis le document de la collection ????

1 votes

Je ne sais pas s'il existe une méthode API pour le faire, vous créez un lien entre eux, en créant un champ dans les deux collections, avec les mêmes valeurs. Ainsi, lorsque vous trouvez la valeur dans la première collection, vous interrogez simplement la collection d'images avec la valeur, et vous trouvez l'image correspondante.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X