MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Рендирайте изображение, съхранено в Mongo (GridFS) с Node + Jade + Express

Разбрах това (благодаря Тимъти!). Проблемът беше моето разбиране за всички тези технологии и как те се съчетават. За всеки друг, който се интересува от показване на изображения от MongoDB GridFS с помощта на Node, Express и Jade ...

Моят документ в MongoDB има препратка към изображението, съхранено в GridFS, което е ObjectId, съхранен като низ. напр. MyEntity {ImageId:'4f6d39ab519b481eb4a5cf52'} <-- NB:Низово представяне на ObjectId. Причината, поради която го съхраних като низ, беше, че съхраняването на ObjectId ми създаваше затруднения при маршрутизирането, тъй като се изобразяваше като двоично и не можех да разбера как да поправя това. (Може би някой може да помогне тук?). Както и да е, решението, което имам, е по-долу:

FileRepository - Извличане на изображението от GridFS, подавам String Id, който след това конвертирам в BSON ObjectId (можете също да получите файла по име на файл):

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

Нефритен шаблон - Изобразете HTML маркирането:

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

Файл App.JS - Маршрутизиране (с помощта на Express) Настройвам маршрута '/data/:imgtag' за динамични изображения:

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

И това свърши работа. Ако имате въпроси, уведомете ме :)



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Проблем с производителността на MongoDB:Единична огромна колекция срещу множество малки колекции

  2. Как се актуализира конкретно поле в mongoose?

  3. Pymongo Regex $всички множество думи за търсене

  4. MongoDB $toBool

  5. mongodb &макс. връзки