nodejs отображает изображение, сохраненное в gridFS в html
Привет, я новичок в 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 напрямую?
2 ответа
Добавьте маршрут для ресурсов в ваш каталог изображений и направьте поток чтения gridfs к ответу прямо так
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);
}
});
};