使用套接字为聊天服务存储图像的正确方法是什么?

What is the proper way of storing images for a chat service using sockets?

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

这是我现在正在做的代码片段:

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存储在服务器上的文件夹中,然后将link保存到数据库中的图像

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

使用 cloudfront 在 Amazon s3 存储中存储图像的好方法。

不要在数据库中存储图像

您在数据库中只存储了一个 link 到该图像。

您的选择:

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

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

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