NodeJS,如何使用MongoDB处理图像上传?

时间:2018-04-06 06:01:37

标签: node.js file-upload

我想知道处理图像上传和保存对数据库的引用的最佳方法是什么。我最感兴趣的是你在这个过程中做了什么命令?

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

或者您应该首先将图像上传到服务器,然后从后端上传并随后保存参考?

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

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

所以基本上如果您上传的图片很少,那么您可以将该图片上传到您的服务器,然后将其上传到您正在使用的任何云存储(s3,Cloudinary,..)。由于这将非常容易实现(您可以通过互联网找到代码段),并且您可以在服务器端安全地维护您的云平台的密钥/凭证。

但是,据我所知,这样做的最佳方法就是这样。我以用户注册为例

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

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

答案 2 :(得分:0)

您可以有很多答案,

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

(将图像更改为其他格式,然后将其保存到mongoDB中)

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

enter image description here