node.js - 显示来自 AWS 的用户个人资料图片

标签 node.js mongodb amazon-web-services amazon-s3

我对 AWS 完全陌生,我想在开始构建之前了解一些关键概念的工作原理。我找到了在 Node JS 中将图像直接上传到 AWS 的教程:

https://devcenter.heroku.com/articles/s3-upload-node#uploading-directly-to-s3

在我的网络应用程序中,我使用 MongoDB,每个用户(用户架构)都可以更改他们的个人资料图片。在较高层面上,我在想,一旦用户选择新图片并点击“保存”,我就会按照上述步骤将新图片直接上传到 AWS“存储桶”。

然后我如何将其呈现回用户的个人资料页面?我是否需要使用 AWS 端的数据库(并跳过我的应用程序的 mongodb 部分)将每个用户与个人资料图片相关联?我理解“保存到 AWS”部分,但不清楚如何以与用户关联的方式检索/渲染图像(保存到 AWS 后立即)。这是我的 Mongoose 用户架构:

'use strict';

var crypto = require('crypto');
var bcrypt = require('bcryptjs');
var mongoose = require('mongoose');
var recipeSchema = require('./recipe.js').schema;
//need the objectID, see: https://gist.github.com/fwielstra/1025038
var Schema = mongoose.Schema;
var ObjectId = Schema.ObjectId;

var userSchema = new Schema({
  email: {
    type: String
  },
  password: String,
  resetPasswordToken: String,
  resetPasswordExpires: Date,
  //image: String ---> replacing this url with AWS
  picture: ObjectId,
  name: String,
  facebook: {
    id: String,
    token: String,
    pictures: String
  },

  emailSubscription: Boolean,


   recipeBox: [{
    id: ObjectId,
    done: Boolean
  }]
});


var User = module.exports = mongoose.model('User', userSchema);

最佳答案

您可以在数据库中保存一条记录,将图像与用户相关联。您可以为此使用任何数据库:MongoDB、DynamoDB、MySQL 或您想要使用的任何其他数据库。这里没有什么特别的事情需要您在 AWS 上使用某种特殊的数据库类型来将图像位置存储在 S3 上。

然后您可以配置 S3 以将存储桶作为静态网站提供服务。当您想要显示图像时,您只需使用图像的 S3 URL 即可。

编辑以回答评论中的问题:

您应该阅读您链接的 Heroku 教程。请参阅本节:

You may wish to assign another, customised name to the object instead of using the one that the file is already named with, which is useful for preventing accidental overwrites in the S3 bucket. This name could be related to the ID of the user’s account, for example.

您可以在其中控制存储在 S3 上的文件的名称,可以使用用户 ID 作为名称。在同一代码块中,您可以使用用户个人资料图像的位置更新数据库。

关于node.js - 显示来自 AWS 的用户个人资料图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34445196/

相关文章:

python - 使用 Boto3 和 Python 如何公开文件夹

python - 使用 AWS S3 for django 在 heroku 上提供静态文件?

php - 从子数组 mongo 文档中删除元素

javascript - 它添加了第二个 } 并且不会在级别上添加 1

javascript - 为什么 Object.create 在 node.js 中不起作用

javascript - Node.js 调用函数要求

javascript - MongoDB 中插入失败

javascript - 独特的验证在 Mongoose 中不起作用

javascript - 在 React Native (Expo) 中将图像转换为 blob 并上传到 S3 存储桶

javascript - 为什么我在本地 node.js/express 服务器的响应中没有收到 JSON 对象?