我对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);
答案 0 :(得分:1)
您可以在将图像与用户关联的数据库中保存记录。您可以使用任何数据库,MongoDB或DynamoDB或MySQL或您想要使用的任何其他数据库。这里没有什么特别之处需要您在AWS上使用某种特殊的数据库类型来存储S3上的图像位置。
然后,您可以配置S3以将存储桶作为静态网站提供服务。当您想要显示图像时,您只需使用图像的S3 URL。
编辑以回答评论中的问题:
您应该阅读您链接的Heroku教程。见本节:
您可能希望为对象指定另一个自定义名称 使用文件已经命名的那个,这很有用 用于防止S3存储桶中的意外覆盖。这个名字可以 例如,与用户帐户的ID相关。
您可以通过使用用户ID作为名称来控制存储在S3上的文件的名称。在同一个代码块中,您可以使用用户个人资料图片的位置更新您的数据库。