显示用户'来自AWS的个人资料图片

时间:2015-12-23 23:19:01

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

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

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

在我的webapp中,我使用的是MongoDB,每个用户(用户架构)都可以更改自己的个人资料图片。在高层次上,我想在用户选择新图片并点击保存后,我会按照上述步骤将新图片直接上传到AWS'。

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

'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);

1 个答案:

答案 0 :(得分:1)

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

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

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

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

  

您可能希望为对象指定另一个自定义名称   使用文件已经命名的那个,这很有用   用于防止S3存储桶中的意外覆盖。这个名字可以   例如,与用户帐户的ID相关。

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