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

jam*_*jam 5 image mongodb node.js

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

  1. 通过将图像存储为二进制文件在常规文档中
  2. 通过Gridfs来管理更大的图像.

为简单起见,因为我计划服务器的图像很小,我会选择选项1.

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

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

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

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

Ran*_*unt 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()})
Run Code Online (Sandbox Code Playgroud)