Image 将图像存储在Mongodb中,并使用Nodejs为其提供服务

Image 将图像存储在Mongodb中,并使用Nodejs为其提供服务,image,node.js,mongodb,Image,Node.js,Mongodb,我知道Mongodb可以通过两种方式存储图像 在常规文档中,将图像存储为二进制 通过Gridfs管理较大的图像 为了简单起见,并且因为我计划发送给服务器的图像很小,我将选择选项1 为了将图像提供给浏览器,我使用nodejs 我的问题是这有多困难?如何将二进制数据转换为浏览器能够理解的实际图像?涉及什么类型的编码 你能给我指一下网上其他地方的教程/例子吗 顺便说一句,我知道出于性能原因,这可能不是一个好主意,我计划缓存一次提供的图像。我只是想避免使用文件系统。我强烈建议不要使用MongoDB提供的

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

  • 在常规文档中,将图像存储为二进制
  • 通过Gridfs管理较大的图像
  • 为了简单起见,并且因为我计划发送给服务器的图像很小,我将选择选项1

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

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

    你能给我指一下网上其他地方的教程/例子吗


    顺便说一句,我知道出于性能原因,这可能不是一个好主意,我计划缓存一次提供的图像。我只是想避免使用文件系统。

    我强烈建议不要使用MongoDB提供的图像

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


    您可能会使用base64编码将文件放入mongodb:(或者只是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()})
    

    要让web浏览器呈现内容,只需发送正确的标题和响应正文

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


    然后浏览器会将此响应解释为PNG类型的图像,并适当地渲染它

    ,这非常有用。现在我知道了如何存储图像。你能把你的答案扩大到包括我如何提供这些图片吗?我的意思是这取决于你是如何询问它们的
    var c=db.foo.find({imgname:“something”};console.log(c.img)
    这是您的服务器,所以…我不完全确定如何告诉您服务内容--我假设您使用的是node?查询不是问题,我可以获取数据。但是如何处理这些二进制数据以使web浏览器将其呈现为普通图像?