【问题标题】:Save image as base64 in mongoDB在mongoDB中将图像保存为base64
【发布时间】:2023-03-11 09:03:01
【问题描述】:

我正在寻找将图像从手机上传到我的服务器的最佳方式。我目前正在使用html5打开相机拍照,然后将文件转换为base64字符串,然后发送到服务器,然后将其保存在MongoDB中。 我预计每天大约有 1000 到 1500 个用户请求(上传图片),所以我有以下问题:

  1. 这是一个好方法吗?
  2. 我应该压缩base64,如果是的话如何?
  3. 应该使用特定的服务器来处理这个任务吗?

我的后端是 node express,前端是 ReactJS。

谢谢

【问题讨论】:

  • 通常最好将图像等文件存储在 Amazon S3 中或直接保存到文件系统中。只需将有关图像的元数据(例如它们的 S3 链接)存储在数据库中即可。

标签: mongodb reactjs express


【解决方案1】:

这一切都取决于你的情况。通过即流从cdn 读取和写入图像通常比从数据库读取和写入图像的二进制表示(即base64)更快。但是,如果从cdn 阅读,您的速度显然会受到您使用的服务的影响。今天,像亚马逊这样的公司可以以非常便宜的价格提供存储,所以如果你不是为学生项目构建一个爱好应用程序,你通常可以负担得起。存储图像的二进制表示实际上最终比存储图像本身要大一点。您不压缩base64,而是在转换之前压缩图像。但是,如果您买不起存储帐户,并且如果您知道您的用户不会上传那么多图像,那么将图像的二进制表示形式存储在数据库中通常就足够了。例如,Mongo Atlas 在其数据库集群上免费提供 512 mb。如果可能的话,将应用程序的任务(例如数据库请求和cdn 服务)从主应用程序中划分出来通常是一个不错的选择。这样,您将划分硬件的 cpu、内存等,并为用户带来更快的读写任务。

node 中有很多不同的模块可以执行此操作。 JIMP 是一个相当不错的内置函数,例如调整图像大小并将它们转换为二进制,如 Bufferbase64

【讨论】:

  • 谢谢。我的主要目标是用户不会等待太长时间来上传图片。我希望在一天内上传 1000 或 1500 张图片,但在一年的剩余时间里应用程序关闭,这只是一天的活动。我确实喜欢压缩文件然后将其转换为 base64 的想法,有什么线索可以做到吗?
  • 是的。 JIMP 是一个不错的模块,具有许多内置功能,例如调整图像大小并将它们转换为二进制文件,例如 Bufferbase64。将更新我的答案
猜你喜欢
  • 1970-01-01
  • 2017-04-15
  • 2014-06-11
  • 2022-11-30
  • 1970-01-01
  • 2016-03-11
  • 1970-01-01
  • 2011-10-18
  • 1970-01-01
相关资源
最近更新 更多