MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Rendering di immagini archiviate in Mongo (GridFS) con Node + Jade + Express

L'ho capito (grazie Timothy!). Il problema era la mia comprensione di tutte queste tecnologie e di come si adattano insieme. Per chiunque altro sia interessato a visualizzare immagini da MongoDB GridFS utilizzando Node, Express e Jade ...

Il mio documento in MongoDB ha un riferimento all'immagine archiviata in GridFS che è un ObjectId archiviato come stringa. per esempio. MyEntity {ImageId:'4f6d39ab519b481eb4a5cf52'} <-- NB:rappresentazione in stringa di ObjectId. Il motivo per cui l'ho memorizzato come stringa era perché la memorizzazione di ObjectId mi dava problemi nel Routing poiché eseguiva il rendering come binario e non riuscivo a capire come risolverlo. (Forse qualcuno può aiutare qui?). Ad ogni modo, la soluzione che ho è la seguente:

Archivio di file - Recupero l'immagine da GridFS, passo uno String Id, che poi converto in BSON ObjectId (puoi anche ottenere il file per nome file):

FileRepository.prototype.getFile = function(callback,id) {
   var gs = new GridStore(this.db,new ObjectID(id), 'r');
   gs.open(function(err,gs){
      gs.read(callback);
   });
 };

Modello Giada - Rendering del markup HTML:

img(src='/data/#{myentity.ImageId}')

File App.JS - Routing (usando Express) Ho impostato il percorso '/data/:imgtag' per le immagini dinamiche:

app.get('/data/:imgtag', function(req, res) {
  fileRepository.getFile( function(error,data) {
     res.writeHead('200', {'Content-Type': 'image/png'});
     res.end(data,'binary');
  }, req.params.imgtag );
});

E questo ha fatto il lavoro. Qualsiasi domanda fammi sapere :)