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».