通过节点 js 在数据库中保存用户照片 API

Saving a users' photo in db via node js API

我有一个节点 js API 使用 mongoldb 和一个快速网络应用程序。 我需要存储用户的个人资料图片。

有哪些好的做法?我已经看到有人通常将图像保存在文件系统上,但我想将我的图像存储在我的 API 上,以防我需要在网络应用程序之外访问它们。如何将图像从浏览器发送到我的 API?

这是一个非常宽泛的问题,详细的答案需要更多地了解您的堆栈,但我会尝试包括您希望使其正常工作的一般组件:

  • 您需要一些中间件来解析多部分文件上传,multer 之类的东西可能会让您感兴趣!另一种选择是在 API 请求中将它们编码为 base64,但这部分取决于它在客户端的实现方式以及文件的大小。
  • 如果您不想将文件存储在文件系统上,您需要配置 multer 将它们保存在内存中,然后将它们存储在 mongodb 作为 BSON 数据(二进制数据)。
  • 你可以使用 GridFS,MongoDB 在 MongoDB 中存储文件的方法,但是如果文件小于 16MB(它们应该用于个人资料图片), 你不一定需要。
  • 如果您没有使用任何客户端 JS 库,您可以简单地创建一个带有标准文件上传元素的表单并提交该表单。这会将其作为多部分文件上传提交。参见example here。如果您使用的是客户端 JS 库,很多都有用于文件上传的插件,可以使它更容易一些,但您不需要使用它们。

This blog post有使用node、MongoDB、multer、GridFS上传的完整示例。它不包括浏览器端代码,但您可以使用 MDN 中的以下示例(前面引用过)作为基础:

<form method="post" enctype="multipart/form-data">
 <div>
   <label for="file">Choose file to upload</label>
   <input type="file" id="file" name="file" multiple>
 </div>
 <div>
   <button>Submit</button>
 </div>
</form>

或更具体到您的客户端库的内容,例如 this example 将 ng2-file-upload 用于 Angular 2.

祝你好运!我希望这能帮助您开始一些总体方向。