2

我正在使用以下代码使用 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);

});

上面的输出是:

在此处输入图像描述

4

3 回答 3

2

除非您真的需要将图像嵌入页面,否则请按照 saintedlama 的回答使用管道。

dHJvb3Blci5qcGVn是 base64 编码的字符串“trooper.jpeg”。请确保您在第一时间将二进制数据正确保存到 GridFS。

您可以直接查询它并检查存储在db中的文件的内容。

于 2016-01-21T12:56:55.637 回答
1
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 获取图像的完美解决方案

于 2017-04-24T16:45:02.580 回答
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。

于 2016-01-21T12:26:54.667 回答