如何在NodeJS&amp ;;中存储个人资料图片MongoDB的?

时间:2017-06-28 13:24:24

标签: node.js express mongoose

让我们说我正在创建一个网站,用户可以在其中注册,登录和查看彼此的个人资料。

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

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

mongoose.Schema({
 username: {
   type: String,
   unique: true,
   required: true
 },
 email: {
   type: String,
   lowercase: true,
   unique: true,
   required: true
 },
 password: {
   type: String,
   required: true
 }
});

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

当我想在我的HTML / View Engine中看到图像时,我会使用类似的东西:

<img src="<%= user.image %>">

然后将实际图像保存在我的文件中?

1 个答案:

答案 0 :(得分:4)

实现目标有三种方法。

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

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

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

  4. 1)只有少数情况下,老实说,你没有那么多的存储(我从来没有在生产中使用这种情况,但很多时候在测试中)。所以我不建议你朝着这个方向前进。

    2)它非常适合大型图像,并且您需要添加一些&#34;逻辑&#34;。例如,我在过去的GridFS中使用了#34;完整图像&#34;并且在同一位置调整了大小(user1_120_90.png,user1_320_240.png)的图像列表,并且由于您的延迟非常低,因此可以非常快速地访问它们。更多我可以添加一些&#34;自定义字段&#34;到存储的对象,然后进行查询,以获得我需要的东西,而无需处理Amazon-S3。

    3)非常可扩展的解决方案,为您提供一些优势(S3在成本方面比GridFS更少扩展,因为GridFS向您收取#34;数据库空间&#34;其中Amazon-S3向您收取&#34 34;只是对象存储&#34;。过去很多项目都是基于那里的.S3带有一个易于使用和管理的NPM模块。

    对于您的场景,我建议您将数据库与对象存储分开。然后在亚马逊,Azure,Google上移动您的文件。如果那时你必须处理非常低延迟的情况,也许你可以考虑GridFS(在我的情况下,交易是管理400Mln 3D图像,其中有很多与它们相关联的几何图形,并作为元数据字段存储在GridFS中)。

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

    祝你好运!