我正在GridFS中上传图片,但不知道如何在<img >
标记中显示该图片。
我尝试了以下代码:
conn.once('open', function () {
var gfs = Grid(conn.db, mongoose.mongo);
gfs.files.find({ filename: 'img1.png' }).toArray(function (err, files) {
if (err) { console.log(err); }
console.log(files);
});
});
我得到了结果:
[ { _id: 5316f8b3840ccc8c2600003c,
filename: 'img1.png',
contentType: 'binary/octet-stream',
length: 153017,
chunkSize: 262144,
uploadDate: Wed Mar 05 2014 15:43:07 GMT+0530 (India Standard Time),
aliases: null,
metadata: null,
md5: '915c5e41a6d0a410128b3c047470e9e3' } ]
现在这只是文件信息而不是实际的文件数据。
如何以HTML格式显示图像?
答案 0 :(得分:4)
您必须为响应定义Content-Type,并使用db connection来获取数据。请查看以下示例以获得一个想法:
app.get('/filelist', function(req, res) {
var collection = db.collection('DbCollectionName');
var da = collection.find().toArray(function(err, items) {
console.log(items[0]);
res.writeHead(200, {'Content-Type': 'image/png'});
res.end(items[1].dbfileName.buffer, 'binary');
});
});
编辑:
因此,当您要将图像设置为源时,可以将图像的二进制数据(从db获取)转换为base64格式。
var img = document.createElement('img');
img.src = 'data:image/jpeg;base64,' + btoa('your-binary-data'); //JS have btoa() function for it.
document.body.appendChild(img);
如果您的图片不支持
,也可以使用hex到base64function hexToBase64(str) {
return btoa(String.fromCharCode.apply(null, str.replace(/\r|\n/g, "").replace(/([\da-fA-F]{2}) ?/g, "0x$1 ").replace(/ +$/, "").split(" ")));
}
并将其命名为
img.src = 'data:image/jpeg;base64,' + hexToBase64('your-binary-data');