我使用' mongoose-Gridstore'保存我的Mongo数据库中的文件。我的问题是在浏览器中显示这些文件。 '内容类型'已设置并且数据也已加载但未显示。
我的路线
router.route('/:image_id').get(function (req, res) {
Image.findById(req.params.image_id, function (err, image) {
image.loadAttachments()
.then(function (doc) {
doc.attachments.forEach(function (attachment) {
console.log(attachment.filename);
console.log(attachment.mimetype);
console.log(attachment);
res.header("Content-Type", attachment.mimetype);
res.send(attachment);
});
})
.catch(function (err) {
console.log('error loading all attachments');
throw err;
});
});
附件看起来像这样:
{ _gsId: 56713c78ba1df3800e816ce5,
filename: 'IMG_5857.JPG',
buffer: <Buffer 2f 39 6a 2f 34 56 62 59 52 58 68 70 5a 67 41 41 53 55 6b 71 41 41 67 41 41 41 41 4d 41 41 38 42 41 67 41 47 41 41 41 41 6e 67 41 41 41 42 41 42 41 67 ... >,
mimetype: 'image/jpeg' }
答案 0 :(得分:0)
试试这个。在img标签中添加此响应,您将获得图像
router.route('/:image_id').get(function (req, res) {
var mongoose = require('mongoose'),
mongoose.connection.once('open', function () {
var gfs = new Grid(mongoose.connection.db, mongoose.mongo);
});
Image.findById(req.params.image_id, function (err, image) {
image.loadAttachments()
.then(function (doc) {
doc.attachments.forEach(function (attachment) {
var rstream = gfs.createReadStream(attachment.filename);
var bufs = [];
rstream.on('data', function (chunk) {
bufs.push(chunk);
}).on('error', function () {
res.send();
})
.on('end', function () { // done
var fbuf = Buffer.concat(bufs);
var imageFile = (fbuf.toString('base64'));
var ret = 'data:image/jpeg;base64,' + imageFile;
res.send(ret);
});
});
})
.catch(function (err) {
console.log('error loading all attachments');
throw err;
});
});
答案 1 :(得分:0)
如果我删除了行res.setHeader(“Content-Type”,attachment.mimetype);我得到一个base 64代码。我复制了代码并在此页面base64online.org/decode上解码。它显示了我上传的图像。我不明白我的错误应该在哪里。