在Mongodb中存储图像为Nodejs提供服务

时间:2012-07-19 20:15:07

标签: image node.js mongodb

我知道Mongodb可以通过两种方式存储图像。

    通过将图像存储为二进制文件在常规文档中
  1. 通过Gridfs来管理更大的图像。
  2. 为简单起见,因为我计划服务的图像很小,我会选择选项1。

    要将图像提供给浏览器,我使用的是nodejs。

    我的问题是这有多难?如何将二进制数据转换为浏览器可以理解的实际图像?涉及什么类型的编码?

    你能指点我在网上其他地方的教程/例子吗?

    顺便说一下,我知道这可能不是出于性能原因的好主意,我计划在服务后缓存图像。我只想避免整个文件系统。

2 个答案:

答案 0 :(得分:6)

我强烈建议不要提供来自MongoDB的图像。

最好将它们存储在静态文件存储(S3)上,并且可以在MongoDB中保留路径。


您可能会使用base64编码将文件放入mongodb:http://www.greywyvern.com/code/php/binary2base64/(或只是base64 shell实用程序)。

如果您只是使用常规文档,那么性能成本相对较低(只要缓存很好)。如果您使用的是具有GridFS和常规文档的混合数据库,那么您的服务器上将需要大量RAM - GridFS查询将与文档查询完全不同。

转换图像可能会这样:

var base64Data = imagefile.replace(/^data:image\/png;base64,/,""),
var dataBuffer = new Buffer(base64Data, 'base64');

// below line won't actually work but it's something along the lines of what you want:

db.foo.insert({magic: 123, etc... img: dataBuffer.toString()})

答案 1 :(得分:2)

要让您的网络浏览器呈现内容,您需要做的就是发送正确的标题和回复正文。

因此,假设您尝试渲染PNG图像,您的mimetype将为image/png,然后将图像文件字节添加到响应正文中。

然后,浏览器会将此响应解释为PNG类型的图像并正确呈现