sql >> Base de Datos >  >> NoSQL >> MongoDB

Lea datos de MongoDB (gridfs) a través del controlador Matlab y Java

Nunca he respondido a ninguna pregunta del foro, pero me he beneficiado mucho especialmente de stackoverflow, así que pensé que tenía que devolver algo al menos una vez. Dado que el problema anterior me estaba molestando durante casi dos días y finalmente logré una solución, pensé que este sería un buen tema para devolverle algo a la comunidad.

Tuve el mismo problema al recuperar una imagen (.png) de MongoDB/GridFS con el controlador Java. Primero, como también se describió anteriormente, debe recuperar el archivo objeto Java:

    import com.mongodb.*;
    import com.mongodb.gridfs.*;

    mongoClient = MongoClient('server_name',27017);
    db = mongoClient.getDB('database_name');
    imgData = GridFS(db,'image_data');

La parte del código anterior obtiene la colección con los datos de la imagen. Posteriormente, el objeto Java de datos de imagen se puede recuperar:

    javaIObj = imgData.findOne('image_name.png');

Ahora se necesita ByteArrayOutputStream donde se puede canalizar el flujo de datos en lugar de un archivo:

    import java.io.ByteArrayOutputStream;

    baos = ByteArrayOutputStream();
    javaIObj.writeTo(baos);

El flujo de salida debe canalizarse nuevamente a un ByteArrayInputStream que se puede usar para construir un objeto ImageIO:

    import java.io.ByteArrayInputStream;
    import javax.imageio.ImageIO;    

    bais = ByteArrayInputStream(baos.toByteArray());
    jbi = ImageIO.read(bais);

Ahora se puede recuperar y mostrar la imagen Matlab real como matriz:

    nrows = jbi.getHeight; ncols = jbi.getWidth;
    data = jbi.getData.getPixels(0,0,ncols,nrows,[]);
    matImg = reshape(data,ncols,nrows)';

    imagesc(matImg);

No sé si esta es la solución perfecta, pero funcionó para mí.

¡Salud!