2010-11-22 4 views

risposta

37

Per la memorizzazione di dati binari come le immagini è possibile utilizzare GridFS o implementare la propria realizzazione; Scarica ile guarda src/test/com/mongodb/gridfs/GridFSTest.java;)

Modifica: sei fortunato oggi! Ho creato un codice completo per te;) Divertiti!

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

grazie per il tuo codice. Ho anche creato un codice per lo stesso processo. Ma il tuo è semplice del mio !!! –

+0

Quindi, per scrivere su un file html, si invierà la posizione dell'immagine sul server all'HTML? – Jeff

+0

Grazie mille, soprattutto per il metodo "LoadImage". –

2

Bene, AFAIK, non è possibile memorizzare le immagini in mongodb , è possibile memorizzare i collegamenti alle immagini. E non sono alto come dico questo, se le immagini sono piccole, come 100x100 px, U può provare a memorizzare l'immagine in binario, e riformare e immagini al volo. Ma ci vorrà un po 'di tempo per eseguire il rendering delle immagini, quindi ti suggerisco di salvare il link, e solo di recuperare quell'immagine e popolarla in modo dinamico.

È possibile utilizzare GridFS per memorizzare oggetti binari di grandi dimensioni.

Dal momento che sei un nuovo MongoDB, dare un'occhiata a:

Link 1

Link 2

Mongo+JAVA Tutorial

GridFS specs

Si può anche chiedere sempre su SO, io sono anche nuovo a mongoDB, e non mi dispiacerebbe aiutare un principiante lungo: D

+0

Come si collega il file GridFS con un documento normale in mongodb. Dì, sto caricando una grande immagine e la immagazzino in GridFS. Salvare gli altri dettagli del file in un documento in qualsiasi raccolta. Come posso recuperare l'immagine associata, quando leggo il documento dalla raccolta ??? –

+1

Non so se esiste un metodo API per farlo, si crea un collegamento tra di loro, creando un campo in entrambe le raccolte, con gli stessi valori. Quindi quando trovi il valore nella prima raccolta, esegui una query sulla raccolta di immagini con il valore e trovi l'immagine corrispondente. – theTuxRacer

5

Per le piccole (< 1MB) immagini Io suggerirei memorizzandoli in un campo binario (byte [] in java); se hai file più grandi GridFS funzionerà meglio.

posso conservare un sacco di miniature nei miei documenti direttamente utilizzando un semplice campo binario.

Io uso Morphia (http://code.google.com/p/morphia) per memorizzare i miei POJO.

+0

Ho intenzione di memorizzare molte immagini in Mongo. Entrambe le miniature e le dimensioni ordinarie. Pojo è essenziale per me ?? !!! –

+0

Puoi dirmi come rappresenti le immagini in mongo. come, {"x": 1, "y": 2} come rappresenti le immagini ???? –

+0

Come memorizzi le tue immagini? Tutto in un unico documento? o documenti separati in una collezione?o Dire se voglio memorizzare più immagini in un documento che assomiglia a '{" nome ":" Tamil "," età ": 23," Immagini "{" immagine1 ": 123.jpg," immagine2 ": abc.jpg }} 'Come devo farlo con java –