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

Gengiv billede gemt i Mongo (GridFS) med Node + Jade + Express

Jeg fandt ud af dette (tak Timothy!). Problemet var min forståelse af alle disse teknologier, og hvordan de passer sammen. For alle andre, der er interesseret i at vise billeder fra MongoDB GridFS ved hjælp af Node, Express og Jade ...

Mit dokument i MongoDB har en reference til billedet, der er gemt i GridFS, som er et ObjectId gemt som en streng. for eksempel. MyEntity {ImageId:'4f6d39ab519b481eb4a5cf52'} <-- NB:Strengrepræsentation af ObjectId. Grunden til, at jeg gemte det som en streng, var, at lagring af ObjectId gav mig en smerte i Routing, da den blev gengivet som binær, og jeg kunne ikke finde ud af, hvordan jeg fikser dette. (Måske nogen kan hjælpe her?). I hvert fald er den løsning, jeg har, nedenfor:

FileRepository - Hent billedet fra GridFS, jeg sender et String Id ind, som jeg så konverterer til et BSON ObjectId (du kan også få filen efter filnavn):

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-skabelon - Gengiv HTML-markeringen:

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

App.JS-fil - Routing (ved hjælp af Express) Jeg opsætter '/data/:imgtag'-ruten for dynamiske billeder:

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 );
});

Og det gjorde arbejdet. Eventuelle spørgsmål lad mig vide :)



  1. PyMongos bulk-skrivefunktioner med generatorer

  2. Mongodb samlet sortering og begrænsning inden for gruppen

  3. TypeError:objekt er ikke en funktion i at bruge MongoDB med Node.js

  4. Får hash med symbol som nøgler til mongo i skinner