Java MongoDB: Exemple de sauvegarde d’image

Java MongoDB: exemple d'enregistrement d'image

Dans ce didacticiel, nous vous montrons comment enregistrer le fichiersave an image dans MongoDB, viaGridFS API. Les API GridFS peuvent également servir d'autres fichiers binaires, comme des fichiers vidéo et musicaux.

Note
Pour une explication détaillée, lisez ceMongoDB GridFS manual.

1. Enregistrer l'image

Extraits de code pour enregistrer un fichier image dans MongoDB, sous l'espace de nom «photo», et attribuer un nouveau «nom de fichier» à l'image enregistrée.

    String newFileName = "example-java-image";
    File imageFile = new File("c:\\JavaWebHosting.png");
    GridFS gfsPhoto = new GridFS(db, "photo");
    GridFSInputFile gfsFile = gfsPhoto.createFile(imageFile);
    gfsFile.setFilename(newFileName);
    gfsFile.save();

2. Obtenir l'image

Extraits de code pour obtenir l'image enregistrée par son «nom de fichier».

    String newFileName = "example-java-image";
    GridFS gfsPhoto = new GridFS(db, "photo");
    GridFSDBFile imageForOutput = gfsPhoto.findOne(newFileName);
    System.out.println(imageForOutput);

En sortie, l'image est enregistrée au format JSON suivant.

{
    "_id" :
    {
        "$oid" : "4dc9511a14a7d017fee35746"
    } ,
    "chunkSize" : 262144 ,
    "length" : 22672 ,
    "md5" : "1462a6cfa27669af1d8d21c2d7dd1f8b" ,
    "filename" : "example-java-image" ,
    "contentType" :  null  ,
    "uploadDate" :
    {
        "$date" : "2011-05-10T14:52:10Z"
    } ,
    "aliases" :  null
}

3. Imprimer toutes les images enregistrées

Extraits de code pour obtenir tous les fichiers enregistrés de MongoDB et itérer avec DBCursor.

    GridFS gfsPhoto = new GridFS(db, "photo");
    DBCursor cursor = gfsPhoto.getFileList();
    while (cursor.hasNext()) {
        System.out.println(cursor.next());
    }

4. Enregistrer dans une autre image

Extraits de code pour obtenir un fichier image de MongoDB et le sortir dans un autre fichier image.

    String newFileName = "example-java-image";
    GridFS gfsPhoto = new GridFS(db, "photo");
    GridFSDBFile imageForOutput = gfsPhoto.findOne(newFileName);
    imageForOutput.writeTo("c:\\JavaWebHostingNew.png"); //output to new file

5. Supprimer l'image

Extraits de code pour supprimer un fichier image.

    String newFileName = "example-java-image";
    GridFS gfsPhoto = new GridFS(db, "photo");
    gfsPhoto.remove(gfsPhoto.findOne(newFileName));

Exemple complet

Exemple complet pour travailler avec l'image, viaJava MongoDB GridFS API. Voir les commentaires pour l'explication.

package com.example.core;

import java.io.File;
import java.io.IOException;
import java.net.UnknownHostException;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.Mongo;
import com.mongodb.MongoException;
import com.mongodb.gridfs.GridFS;
import com.mongodb.gridfs.GridFSDBFile;
import com.mongodb.gridfs.GridFSInputFile;

/**
 * Java MongoDB : Save image example
 *
 */

public class SaveImageApp {
    public static void main(String[] args) {

        try {

            Mongo mongo = new Mongo("localhost", 27017);
            DB db = mongo.getDB("imagedb");
            DBCollection collection = db.getCollection("dummyColl");

            String newFileName = "example-java-image";

            File imageFile = new File("c:\\JavaWebHosting.png");

            // create a "photo" namespace
            GridFS gfsPhoto = new GridFS(db, "photo");

            // get image file from local drive
            GridFSInputFile gfsFile = gfsPhoto.createFile(imageFile);

            // set a new filename for identify purpose
            gfsFile.setFilename(newFileName);

            // save the image file into mongoDB
            gfsFile.save();

            // print the result
            DBCursor cursor = gfsPhoto.getFileList();
            while (cursor.hasNext()) {
                System.out.println(cursor.next());
            }

            // get image file by it's filename
            GridFSDBFile imageForOutput = gfsPhoto.findOne(newFileName);

            // save it into a new image file
            imageForOutput.writeTo("c:\\JavaWebHostingNew.png");

            // remove the image file from mongoDB
            gfsPhoto.remove(gfsPhoto.findOne(newFileName));

            System.out.println("Done");

        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (MongoException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

A la fin du programme, un nouveau fichier image est créé dans «c:\JavaWebHostingNew.png».