2010-11-22 17 views

Odpowiedz

37

Do przechowywania danych binarnych, takich jak obrazy, można użyć GridFS lub zrealizować własną realizację; Pobierz driver i spójrz na src/test/com/mongodb/gridfs/GridFSTest.java;)

Edytuj: masz szczęście już dziś! Zrobiłem dla ciebie kompletny kod;) Ciesz się!

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

dzięki za twój kod. Zrobiłem również kod dla tego samego procesu. Ale twój jest prosty niż mój !!! –

+0

Tak więc, aby napisać do pliku html, czy wypiszesz położenie obrazu na serwerze do kodu HTML? – Jeff

+0

Dziękuję bardzo, szczególnie za metodę "LoadImage". –

2

Cóż, AFAIK, nie możesz przechowywać obrazów w mongodb , możesz przechowywać linki do zdjęć. I nie jestem wysoki, jak to mówię, jeśli obrazy są małe, takie jak 100x100 px, U można spróbować zapisać obraz w formacie binarnym, a reformy i obraz w locie. Jednak renderowanie obrazów zajmie trochę czasu, dlatego sugeruję, aby zapisać link, a następnie po prostu pobrać ten obraz i wypełnić go dynamicznie.

Możesz użyć GridFS do przechowywania większych obiektów binarnych.

Ponieważ jesteś nowy MongoDB, przyjrzeć:

Link 1

Link 2

Mongo+JAVA Tutorial

GridFS specs

Można też zawsze poprosić o tak, jestem również nowy w mongoDB i nie miałby nic przeciwko pomaganiu nowicjuszowi: D

+0

Jak połączyć plik GridFS z zwykłym dokumentem w mongodb. Powiedz, że przesyłam duży obraz i zapisuję go w GridFS. Zachowuję inne szczegóły pliku w dokumencie w dowolnej kolekcji. Jak mogę pobrać skojarzony obraz, kiedy czytam dokument z kolekcji ??? –

+1

Nie wiem, czy istnieje jakaś metoda API, aby to zrobić, możesz utworzyć połączenie między nimi, tworząc pole w obu kolekcjach o tych samych wartościach. Więc kiedy natkniesz się na wartość z pierwszej kolekcji, możesz zapytać zbiór obrazów o wartość i znaleźć odpowiedni obraz. – theTuxRacer

5

Dla małych (< 1MB) zdjęć sugeruję przechowując je w polu binarnym (byte [] w java); jeśli masz większe pliki GridFS będzie działać lepiej.

Przechowuję wiele miniatur w moich dokumentach bezpośrednio przy użyciu prostego pola binarnego.

Używam Morphia (http://code.google.com/p/morphia) do przechowywania moich POJO.

+0

Mam zamiar przechowywać wiele zdjęć w Mongo. Obie miniatury i zwykły rozmiar. Czy pojo jest dla mnie niezbędne? !!! –

+0

Czy możesz mi powiedzieć, w jaki sposób reprezentujesz obrazy w Mongo. jak, {"x": 1, "y": 2} jak reprezentujesz obrazy ??? –

+0

Jak przechowujesz swoje zdjęcia? Wszystko w jednym dokumencie? lub osobne dokumenty w jednej kolekcji?lub Powiedz, czy chcę zapisać wiele obrazów w dokumencie, który wygląda jak '{" nazwa ":" Tamil "," wiek ": 23," Obrazy "{" obrazek1 ": 123.jpg," obraz2 ": abc.jpg }} 'jak mam to zrobić z Javą –

Powiązane problemy