在Mongodb中存储图像为Nodejs提供服务
我知道Mongodb可以用两种方式存储图像。
- 在一个常规的文件中,将图像存储为二进制文件
- 通过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的图像并且适当地渲染它