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

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

  1. 在一个常规的文件中,将图像存储为二进制文件
  2. 通过Gridfs来pipe理更大的图像。

为了简单起见,因为我打算服务器的图像很小,我会select1。

为了将图像提供给浏览器,我使用了nodejs。

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

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

顺便说一句,我知道这可能不是一个好主意,因为性能的原因,我计划caching一次服务的图像。 我只是想避免文件系统。

我强烈build议不要从MongoDB提供图片。

将它们存储在一个静态文件存储(S3)上可能更好,也可能在MongoDB中保留path。


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

如果您只是使用常规文档,那么性能成本相对较低(只要caching是好的)。 如果您使用的是具有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()}) 

所有你需要做的,让你的网页浏览器渲染的内容是发送正确的标题和响应正文。

所以,假设你正在尝试渲染一个PNG图像,你的mimetype将是image/png ,然后将图像文件字节添加到响应主体。

然后浏览器将把这个响应解释为一个PNGtypes的图像并且适当地渲染它