MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Daten aus MongoDB (gridfs) über Matlab und Java-Treiber lesen

Ich habe noch nie auf Forenfragen geantwortet, aber besonders vom Stackoverflow habe ich sehr profitiert, also dachte ich, ich muss wenigstens einmal etwas zurückgeben. Da mich das obige Problem jetzt seit fast zwei Tagen nervt und ich endlich eine Lösung zusammengenäht habe, dachte ich, dass dies ein gutes Thema wäre, um der Community etwas zurückzugeben.

Ich hatte das gleiche Problem beim Abrufen eines Bildes (.png) von einem MongoDB/GridFS mit dem Java-Treiber. Zuerst müssen Sie, wie ebenfalls oben beschrieben, die Datei Java-Objekt abrufen:

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

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

Der obige Codeteil ruft die Sammlung mit den Bilddaten ab. Anschließend kann das Bilddaten-Java-Objekt abgerufen werden:

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

Jetzt wird ByteArrayOutputStream benötigt, wo der Datenstrom statt in eine Datei geleitet werden kann:

    import java.io.ByteArrayOutputStream;

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

Der Ausgabestrom muss wieder in einen ByteArrayInputStream geleitet werden, der zum Erstellen eines ImageIO-Objekts verwendet werden kann:

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

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

Jetzt kann das eigentliche Matlab-Bild als Matrix abgerufen und angezeigt werden:

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

    imagesc(matImg);

Ich weiß nicht, ob das die perfekte Lösung ist, aber bei mir hat es funktioniert.

Prost!