【问题标题】:NodeJS, how to handle image uploading with MongoDB?NodeJS,如何使用 MongoDB 处理图像上传?
【发布时间】:2020-06-04 14:46:10
【问题描述】:

我想知道处理图像上传和保存对数据库的引用的最佳方法是什么。我最感兴趣的是您按什么顺序执行此过程?

您是否应该先在前端(例如 Cloudinary)上传图片,然后调用 API 以及图片的结果链接并将其保存到数据库中?

还是先把图片上传到服务器,再从后端上传,然后保存参考?

或者,您是否应该在将记录保存在数据库中之后进行图像上传,然后在图像上传后更新它?

【问题讨论】:

    标签: node.js file-upload


    【解决方案1】:

    这实际上取决于您每天需要上传的资源、时间线和图片数量。

    因此,基本上,如果您要上传的图像很少,那么您可以将该图像上传到您的服务器,然后将其上传到您正在使用的任何云存储(s3、Cloudinary、..)。因为这很容易实现(您可以在互联网上找到代码 sn-p),并且您可以在服务器端安全地维护您的云平台的密钥/凭证。

    但是,在我看来,最好的方法是这样的。我以用户注册为例

    1. 调用服务器以获取临时凭证以在云上上传文件(通常,所有提供商都提供此功能,即 AWS 中的 STS/签名 URL)。
    2. 用户将填写表格并在客户端选择图像。当用户单击提交按钮时,进行一次调用以将用户保存在数据库中并开始使用凭据上传。如果可能,请保留可预测的上传路径。就像用户上传 /users/:userId 或类似的东西。这在很大程度上取决于您的用例。
    3. 现在,当上传完成后,请调用服务器进行确认并在数据库中存储一些标志。

    现在这种方法的优点是:

    1. 您将服务器从处理非常繁重和 I/O 阻塞的文件操作中完全卸载,并将该负载分配给所有客户端。
    2. 如果您想在上传后对文件进行后处理,您可以轻松地将其与无服务器平台集成,然后在该平台上执行此操作,然后再次卸载。
    3. 您可以轻松地为您的用户提供重试机制,以防文件上传失败,但他们不需要重新填充数据,只需重新上传图像/文件即可
    4. 您无需将 URL 直接公开给客户端进行文件上传,因为您使用的是临时 Creds。

    【讨论】:

      【解决方案2】:

      如果图像在您的应用中的重要性很高,那么理想情况下,您不应该在图像保存之前完成交易。方法应该是在您的代码中创建一个对象,您最终将其插入 mongodb,开始将图像上传到云,然后添加到该对象的链接。最后,将这个对象一次性插入到 mongodb 中。不要重复拨打电话。在此之前的任何事情,引发错误并捕获异常

      【讨论】:

        【解决方案3】:

        你可以有很多答案,

        如果您正在处理大于 16mb 的大文件,请使用 gridfs 和 multer,

        (把图片换成不同的格式保存到mongoDB)

        如果您的文件实际上小于 16 mb,请尝试使用此转换器将格式 jpeg / png 的图像更改为保存到 mongodb 的格式,您可以将其视为 gridfs 的简单替代方案,

        please check this github repo for more details..

        【讨论】:

          猜你喜欢
          • 2021-11-23
          • 1970-01-01
          • 2021-08-16
          • 1970-01-01
          • 1970-01-01
          • 2011-09-29
          • 2020-06-28
          • 1970-01-01
          • 2019-10-02
          相关资源
          最近更新 更多