L'ho capito (grazie a Timothy!). Il problema era la mia comprensione di tutte queste tecnologie e di come si combinavano. Per chiunque sia interessato a visualizzare immagini da MongoDB GridFS usando Node, Express e Jade ...
Il mio documento in MongoDB ha un riferimento all'Immagine memorizzata in GridFS che è un ObjectId memorizzato come una stringa. per esempio. MyEntity {ImageId: '4f6d39ab519b481eb4a5cf52'} < - NB: rappresentazione di stringa di ObjectId. Il motivo per cui l'ho memorizzato come stringa era perché la memorizzazione di ObjectId mi dava fastidio nel routing mentre veniva eseguito il rendering come binario e non riuscivo a capire come risolvere il problema. (Forse qualcuno può aiutare qui?). In ogni caso, la soluzione che ho è di seguito:
FileRepository - Recuperare l'immagine da GridFS, passo in uno String Id, che ho poi convertire in un BSON ObjectId (è anche possibile ottenere il file in base al nome del 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);
});
};
Jade Template - rendering del Tag HTML:
img(src='/data/#{myentity.ImageId}')
App.JS il file - Routing (a mezzo Express) ho configurato il '/ data /: imgtag' percorso per 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 che ha fatto il lavoro. Qualsiasi domanda me lo faccia sapere :)
fonte
2012-03-24 03:30:27
Correggere il tipo mime o rilevarlo dalla gridf –
Grazie Timothy, che mi ha indirizzato nella giusta direzione.C'erano altri problemi che dovevo affrontare, quindi ho pubblicato la mia soluzione qui sotto per completezza. –