从Mongo中提供已保存的缓冲区

时间:2013-05-17 03:57:46

标签: node.js express mongoose

我正在尝试提供存储在Mongo文档中的图像。我正在使用express,express-resource和mongoose。

数据是JPG,存储在我的架构的Buffer字段中。看起来它正确到达那里,因为我可以使用cli读取数据。

然后我运行一个查找,抓住该字段并尝试发送它。见代码:

res.contentType('jpg');
res.send(img);

我认为这不是存储问题,因为我在这里执行相同的操作:

var img = fs.readFileSync(
    __dirname + '/../../img/small.jpg'
);
res.contentType('jpg');
res.send(img);

在浏览器中显示图像(作为损坏的图标)。

我想知道这是否是express-resource的问题,因为我将格式设置为json,但是我确实在发送数据之前覆盖了内容类型。

划伤头

1 个答案:

答案 0 :(得分:2)

我自己设法解决了这个问题。好像我使用正确的方法从express发送数据,但没有正确存储(棘手!)。

为了将来参考任何处理图像下载并在Buffers中管理它们的人,这里有一些使用请求包的示例代码:

request(
    {
        uri: uri,
        encoding: 'binary'
    },
    function (err, response, body)
    {
        if (! err && response.statusCode == 200)
        {
            var imgData = new Buffer(
                body.toString(),
                'binary'
            ).toString('base64');
            callback(null, new Buffer(imgData, 'base64'));
        }

    }
);

在Mongo中,您需要设置类型为Buffer的文档属性才能成功存储它。似乎这个问题是由于我如何将它保存到Mongo中。

希望将来节省一些时间。 =)