我知道Mongodb可以通过两种方式存储图像。
为简单起见,因为我计划服务的图像很小,我会选择选项1。
要将图像提供给浏览器,我使用的是nodejs。
我的问题是这有多难?如何将二进制数据转换为浏览器可以理解的实际图像?涉及什么类型的编码?
你能指点我在网上其他地方的教程/例子吗?
顺便说一下,我知道这可能不是出于性能原因的好主意,我计划在服务后缓存图像。我只想避免整个文件系统。
答案 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类型的图像并正确呈现