2015-07-03 46 views
1

您好我是新來的和的NodeJS GridFS的 我想顯示存儲在GridFS的圖片到我的html頁面顯示的NodeJS存儲在GridFS的圖像爲HTML

目前,我正在使用此代碼。

gfs.exist(options, function(err, found){ 
     if(err) return handleError(err); 
     if(found) 
     { 
      console.log("Found Image"); 
      var fs_write_stream = fs.createWriteStream('public/images/'+req.user._id + '_photo' + '.jpg'); 
      var readstream = gfs.createReadStream({ 
       filename: req.user._id + '_photo' 
      }); 
      readstream.pipe(fs_write_stream); 
      readstream.on('close', function(){ 
       console.log('file has been written fully'); 
       res.render('profile', { 
        user : req.user, 
        message: req.flash('info'), 
        user_photo_url: 'images/'+req.user._id+'_photo.jpg' 
       }); 
      }); 
     } 
    }); 

但我的代碼需要從gridFS下載圖像。如果我的服務器存儲不夠,應該是有問題的

有沒有什麼方法可以直接向html顯示gridFS圖像?

回答

2

添加您的圖像目錄和管道資源的路線的GridFS的readstream直接像這樣

app.get('/images/:name', function(req, res) { 
    var readstream = gfs.createReadStream({ 
     filename: req.param('name'); 
    }); 
    res.pipe(readstream); 
}) 

在HTML的響應,所有你需要做的就是在你的圖像正確指定src網址

+0

謝謝!最後我可以解決問題! – kwony

+4

你的代碼沒有工作,但改變了readstream.pipe(res);它運行良好 – kwony

1
  var pi_id = fields.pic_id; 

     gfs.findOne({ _id: pi_id }, function (err, file) { 
        console.log(file); 
        if (err) return res.status(400).send(err); 
        if (!file) return res.status(404).send(''); 

        res.set('Content-Type', file.contentType); 
        res.set('Content-Disposition', 'attachment; filename="' + file.filename + '"'); 

        var readstream = gfs.createReadStream({ 
         _id: file._id 
        }); 

        readstream.on("error", function(err) { 
         console.log("Got error while processing stream " + err.message); 
         res.end(); 
        }); 

        readstream.pipe(res); 

        console.log(readstream.pipe(res)) 
        }); 
+0

此方法下載文件,而不是在瀏覽器中顯示圖像。我怎麼才能得到與url的圖像,而不是下載? – Tharindu

相關問題