2010-11-22 20 views

Respuesta

37

Para almacenar datos binarios como imágenes, puede usar GridFS o implementar su propia realización; Descargue el driver y mire src/test/com/mongodb/gridfs/GridFSTest.java;)

Editar: ¡hoy tiene suerte! Hice un código completo para ti;) ¡Disfruta!

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

gracias por su código. También hice un código para el mismo proceso. ¡Pero el tuyo es simple que el mío! –

+0

Entonces, para escribir en un archivo html, ¿generaría la ubicación de la imagen en el servidor al HTML? – Jeff

+0

Muchas gracias, especialmente por el método 'LoadImage'. –

2

Bueno, AFAIK, no puede almacenar imágenes en mongodb , puede almacenar los enlaces a las imágenes. Y no soy tan alto como digo esto, si las imágenes son pequeñas, como 100x100 px, U puede intentar almacenar la imagen en binario, y reformar e imagen sobre la marcha. Sin embargo, tomará algún tiempo procesar las imágenes y, por lo tanto, le sugiero que guarde el enlace y solo busque esa imagen y la complete dinámicamente.

Puede usar GridFS para almacenar objetos binarios más grandes.

Puesto que usted es nuevo en MongoDB, echar un vistazo a:

Link 1

Link 2

Mongo+JAVA Tutorial

GridFS specs

También puede pedir siempre el SO, yo soy también nuevo para mongoDB, y no le importaría ayudar a un novato a lo largo de: D

+0

¿Cómo se vincula el archivo GridFS con documento simple en mongodb. Digamos que estoy cargando una imagen grande y la guardo en GridFS. Guardo los otros detalles del archivo en un documento en cualquier colección. ¿Cómo puedo recuperar la imagen asociada cuando leo el documento de la colección? –

+1

no sé si hay algún método de API para hacerlo, crea un enlace entre ellos, creando un campo en ambas colecciones, con los mismos valores. Entonces, cuando encuentre el valor en la primera colección, deberá consultar la colección de imágenes con el valor y encontrar la imagen correspondiente. – theTuxRacer

5

Para pequeños (< 1mb) imágenes me gustaría sugerir almacenarlos en un campo binario (byte [] en Java); si tiene archivos más grandes, GridFS funcionará mejor.

Guardo muchas miniaturas en mis documentos directamente usando un campo binario simple.

Uso Morphia (http://code.google.com/p/morphia) para almacenar mis POJO.

+0

Voy a almacenar muchas imágenes en mongo. Ambas miniaturas y tamaño ordinario. ¿Es pojo esencial para mí? –

+0

¿Puede decirme cómo representa imágenes en mongo? como, {"x": 1, "y": 2} ¿cómo se representan las imágenes ??? –

+0

¿Cómo almacena sus imágenes? ¿Todo en un documento? o documentos separados en una colección?o Di si quiero almacenar varias imágenes en un documento que se parece a '{" name ":" Tamil "," age ": 23," Images "{" image1 ": 123.jpg," image2 ": abc.jpg }} 'cómo lo haré con java –

Cuestiones relacionadas