我使用以下代码使用GridFs读取保存在MongoDB中的图像文件:
app.get('/picture', function(req, res) {
var readstream = gfs.createReadStream({
filename: 'trooper.jpeg'
});
readstream.on('data', function (data) {
// We got a buffer of data...
var buf2 = new Buffer(data).toString('base64');
res.send(buf2.toString())
console.log(buf2.toString());
console.log(data);
});
readstream.on('end', function () {
// File finished reading...
});
});
console.log(buff.toString()); 的输出是:
dHJvb3Blci5qcGVn
console.log(data); 的输出是:
<Buffer 74 72 6f 6f 70 65 72 2e 6a 70 65 67>
要显示图像,我这样做了:
<img src="data:image/jpeg;base64,dHJvb3Blci5qcGVn">
我无法从GridFs MongoDB中读取和显示html中的图像
更新
我试过这个:
app.get('/picture', function(req, res) {
res.contentType('image/jpeg');
var readstream = gfs.createReadStream('trooper.jpeg');
readstream.pipe(res);
});
以上的输出是:
答案 0 :(得分:1)
除非您确实需要将图像嵌入到页面中,否则请使用saintedlama的答案。
dHJvb3Blci5qcGVn
是base64编码的字符串“trooper.jpeg”。请确保您在第一次将二进制数据正确保存到GridFS。
您可以query it directly并检查数据库中存储的文件的内容。
答案 1 :(得分:0)
您可以将GridFS读取流传输到响应而不进行缓冲:
app.get('/picture', function(req, res) {
// Set correct content type first
res.contentType('image/png');
fs
.createReadStream('/tmp/Disneygoofy2012.jpeg')
.pipe(res);
});
我猜你的缓冲解决方案的问题是你只将你从GridFS收到的第一个字节包传递给res.send。
答案 2 :(得分:0)
var Grid = require("gridfs-stream");
Grid.mongo = mongo;
router.get("/:filename", function(req, res){
gfs = Grid(db);
var readstream = gfs.createReadStream({filename: req.params.filename});
readstream.on("error", function(err){
res.send("No image found with that title");
});
readstream.pipe(res);
});
这是从gridfs获取图像的完美解决方案