【问题标题】:What is the proper way of storing images for a chat service using sockets?使用套接字为聊天服务存储图像的正确方法是什么?
【发布时间】:2015-11-25 03:20:01
【问题描述】:

好的,所以我到处看了,人们似乎对此有不同的看法。所以我继续前进,只是按照我认为正确的方式做了,我现在有了第二个想法,因为我认为在 mongodb 数据库中存储一个巨大的 base64 字符串是荒谬的。

这是我现在正在做的代码的 sn-p:

var imgUploader;
   // Base64Img holds the base 64 value from the chosen file.
    if(base64Img != ""){

         // Send message to chat and save to mongo: 
          socket.emit('clientMessage', {
               message: $('#chatMessage').val(), 
               name: user.name,
               userId: user.userId,
               image : base64Img
          });
        $("#imgUpload").val("");
        base64Img = "";
        return;
}

我正在使用sockets.ionodebase64 与其他消息数据一起发送到服务器,因此可以将其保存到mongoDB,然后发回给其他聊天用户。一旦其他用户取回该数据,我只需将 base64 值附加到 <img /> html 标记

可能的选择:

  1. Image存储在服务器上的文件夹中,然后将链接保存到数据库中的图像

【问题讨论】:

    标签: node.js mongodb socket.io


    【解决方案1】:

    最好将图像存储在服务器上的文件夹中,而不是 Base64 字符串和/或数据库中。

    使用云端将图像存储在 Amazon s3 存储中的好方法。

    【讨论】:

    • 好的!知道如何通过套接字发送图像文件吗? (如果可能的话)
    • 顺便说一句,如果我没记错的话,你可以直接在 s3 上发送图片链接。
    • 是的,在 s3 上上传图片,完成后将 url 发送给另一个用户或服务器
    【解决方案2】:

    不要将图像存储在数据库中

    您只将指向该图像的链接存储在 DB 中。

    您的选择:

    • 您可以将 base64 转换回图像并保存在磁盘上。
    • 或者,不是以 base64 编码发送图像,这会增加大约 20-30% 的大小。 您可以使用单独的 http 方法将图像发送到服务器并保存在那里。 该方法将向您返回该图像的链接,然后您将使用 websockets 将其与您的消息一起发送。

    您还可以使用 Amazon S3、Google Storage 或其他一些可以保存图像的服务,而不是将图像保存在您的服务器上。

    但无论哪种方式,您都应该只在数据库中保留一个链接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-24
      • 2011-10-06
      • 1970-01-01
      • 1970-01-01
      • 2015-10-20
      • 1970-01-01
      • 2016-03-18
      • 2013-04-03
      相关资源
      最近更新 更多