2010-11-22 4 views

Antwort

37

Zum Speichern binärer Daten wie Bilder können Sie GridFS verwenden oder Ihre eigene Realisation implementieren; Downloade die driver und schaue auf src/test/com/mongodb/gridfs/GridFSTest.java;)

Edit: Sie haben Glück heute! Ich habe kompletten Code für dich gemacht;) Viel Spaß!

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

danke für deinen Code. Ich habe auch einen Code für den gleichen Prozess erstellt. Aber deine ist einfach als meine !!! –

+0

Also, um in eine HTML-Datei zu schreiben, würden Sie den Bildspeicherort auf dem Server zum HTML ausgeben? – Jeff

+0

Vielen Dank, besonders für die 'LoadImage'-Methode. –

2

Nun, AFAIK, können Sie nicht speichern Bilder in mongodb , können Sie die Links zu Bildern speichern. Und ich bin nicht high, wie ich das sage, wenn die Bilder klein sind, wie 100x100 px, U kann versuchen, das Bild in Binärform zu speichern, und reformieren und Bild im laufenden Betrieb. Aber es wird einige Zeit dauern, um die Bilder zu rendern, und daher empfehle ich Ihnen, den Link zu speichern, und holen Sie einfach dieses Bild und füllen Sie es dynamisch.

Sie können GridFS zum Speichern größerer binärer Objekte verwenden.

Da Sie mongoDB neu sind, werfen Sie einen Blick auf:

Link 1

Link 2

Mongo+JAVA Tutorial

GridFS specs

Sie können auch fragen, auf immer so, ich bin auch neu bei mongoDB, und hätte nichts dagegen, einem Neuling zu helfen: D

+0

Wie verknüpfen Sie GridFS-Datei mit einfachem Dokument in Mongodb. Sagen wir, ich lade ein großes Bild hoch und ich speichere es in GridFS. Ich speichere die anderen Details der Datei in einem Dokument in jeder Sammlung. Wie kann ich das zugehörige Bild abrufen, wenn ich das Dokument aus der Sammlung lese? –

+1

ich weiß nicht, ob es eine API-Methode gibt, um es zu tun, Sie erstellen eine Verknüpfung zwischen ihnen, indem Sie ein Feld in beiden Sammlungen mit den gleichen Werten erstellen. Wenn Sie also auf den Wert in der ersten Sammlung stoßen, müssen Sie die Bildersammlung nur mit dem Wert abfragen und auf das entsprechende Bild stoßen. – theTuxRacer

5

Für kleine (< 1MB) Bilder, die ich vorschlagen würde sie in einem binären Feld (byte [] in Java) zu speichern; Wenn Sie größere Dateien haben, wird GridFS besser funktionieren.

Ich speicher viele Thumbnails in meinen Dokumenten direkt mit einem einfachen binären Feld.

Ich verwende Morphia (http://code.google.com/p/morphia), um meine POJOs zu speichern.

+0

Ich werde viele Bilder in Mongo speichern. Beide Thumbnails und normale Größe. Ist Pojo essentiell für mich? !!! –

+0

Können Sie mir sagen, wie Sie Bilder in Mongo darstellen? Wie, {"x": 1, "y": 2} Wie stellst du Bilder dar? –

+0

Wie speichern Sie Ihre Bilder? Alles in einem Dokument? oder separate Dokumente in einer Sammlung?oder Sagen Sie, wenn ich mehrere Bilder in einem Dokument speichern möchte, das aussieht wie '{" name ":" Tamilisch "," Alter ": 23," Bilder "{" image1 ": 123.jpg," image2 ": abc.jpg }} Wie soll ich das mit Java machen? –

Verwandte Themen