sql >> Databáze >  >> NoSQL >> MongoDB

Vykreslit obrázek uložený v Mongo (GridFS) pomocí Node + Jade + Express

Přišel jsem na to (díky Timothy!). Problém byl v mém pochopení všech těchto technologií a toho, jak do sebe zapadají. Pro kohokoli dalšího, kdo má zájem o zobrazování obrázků z MongoDB GridFS pomocí Node, Express a Jade ...

Můj dokument v MongoDB má odkaz na obrázek uložený v GridFS, což je ObjectId uložené jako řetězec. např. MyEntity {ImageId:'4f6d39ab519b481eb4a5cf52'} <-- Poznámka:Řetězcová reprezentace ObjectId. Důvod, proč jsem to uložil jako řetězec, byl ten, že uložení ObjectId mi způsobovalo potíže se směrováním, protože se vykreslovalo jako binární, a nemohl jsem přijít na to, jak to opravit. (Možná tady někdo může pomoci?). Každopádně řešení, které mám, je níže:

Úložiště souborů - Načtěte obrázek z GridFS, předám String Id, které pak převedu na BSON ObjectId (soubor můžete také získat podle názvu souboru):

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

Šablona jadeit - Vykreslit značku HTML:

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

Soubor App.JS - Směrování (pomocí Express) Nastavil jsem cestu '/data/:imgtag' pro dynamické obrázky:

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

A to udělalo práci. Případné dotazy mi dejte vědět :)



  1. Jak zničit pracovní místa ve frontě resque pracovníky?

  2. MongoDB 3.6.2 2008R2 Plus se neinstaluje

  3. Operátor agregačního potrubí MongoDB $gt

  4. Redis jak uložit asociativní pole? Set nebo Hash nebo List?