Mongodb nodejs将存储在gridFS中的图像显示为html
嗨,我是nodejs和gridFS的新手 我正在尝试将存储在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
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获取图像而不是下载?