如何在NodeJS和Mongodb中存储个人资料图片?

Sid*_*exx 0 mongoose node.js express

假设我正在创建一个网站,用户可以在该网站上注册,登录并查看彼此的个人资料。

我已经创建了注册,登录并查看其他人的个人资料的功能,但是我不知道如何为每个用户添加唯一的个人资料图片。

这是我当前保存用户数据的方式。

mongoose.Schema({
 username: {
   type: String,
   unique: true,
   required: true
 },
 email: {
   type: String,
   lowercase: true,
   unique: true,
   required: true
 },
 password: {
   type: String,
   required: true
 }
});
Run Code Online (Sandbox Code Playgroud)

我应该在哪里保存这些图像?甚至可以将.png文件保存在mongodb中吗?

当我想在我的HTML / View Engine中查看图像时,我是否可以简单地使用以下内容:

<img src="<%= user.image %>">
Run Code Online (Sandbox Code Playgroud)

然后将实际图像保存在文件中的某个位置?

Dan*_*one 5

有三种方法可以实现您的目标。

  1. 将字段直接保存在MongoDB中(文档)

  2. 将字段直接保存在MongoDB(GridFS)中

  3. 上传到AmazonS3并将ID直接保存在MongoDB中(文档)

1)坦白地说,只有很少的情况下您没有太多存储空间(我从未在生产中使用过此场景,而是在测试中花费了很多时间)。因此,我不建议您朝这个方向前进。

2)非常适合大型图像以及需要添加一些“逻辑”的地方。例如,在过去的GridFS中,我使用了“完整图像”和调整图像大小的列表(user1_120_90.png,user1_320_240.png),并且在同一位置可以快速访问它们,因为等待时间非常短。我甚至可以在存储的对象中添加一些“自定义字段”,然后进行查询以获取我真正需要的内容,而无需处理Amazon-S3。

3)具有高度可扩展性的解决方案,为您提供一些优势(就成本而言,S3的扩展性比GridFS小,因为GridFS收取您“数据库空间”的费用,而Amazon-S3收取您“正义的对象存储”的费用。 S3附带了一个NPM模块,该模块易于使用和管理。

对于您的方案,我建议您将数据库与对象存储区分开。然后在Amazon,Azure,Google上移动文件。如果那么您必须处理非常低延迟的情况,也许您可​​以考虑使用GridFS(在我的情况下,这是管理4亿个3D图像的工作,这些3D图像具有与之关联的许多几何形状并作为元数据字段存储在GridFS中)。

参考GridFS:https ://docs.mongodb.com/manual/core/gridfs/

祝好运!