Mongodb nodejs将存储在gridFS中的图像显示为html

Mongodb nodejs将存储在gridFS中的图像显示为html,mongodb,gridfs,Mongodb,Gridfs,嗨,我是nodejs和gridFS的新手 我正在尝试将存储在gridFS中的图像显示到我的html页面 目前,我正在使用此代码 gfs.exist(options, function(err, found){ if(err) return handleError(err); if(found) { console.log("Found Image"); var fs_write_stream = fs

嗨,我是nodejs和gridFS的新手 我正在尝试将存储在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下载图像。如果我的服务器存储空间不够,那应该是有问题的


是否有任何方法可以直接将gridFS图像显示为html?

为图像目录中的资源添加一个路由,并通过管道将gridFS readstream直接发送到响应,如下所示

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

在html中,只需在图像中正确指定src url即可

尝试以下功能

         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))
                  });   
function(req,res){
  gfs.files.findOne({ filename: req.params.filename }, (err, file) => {
    res.contentType(file.contentType);
    // Check if image
    if (file) {
      // Read output to browser
      const readstream = gfs.createReadStream(file.filename);
      readstream.pipe(res);
    } else {
        console.log(err);
    }
  });
};

啊,您的代码不起作用,但更改了readstream.pipe(res);它工作得很好。这种方法下载文件,而不是在浏览器中显示图像。如何使用url获取图像而不是下载?