显示来自 AWS 的用户资料图片
Posted
技术标签:
【中文标题】显示来自 AWS 的用户资料图片【英文标题】:Showing Users' Profile Pictures from AWS 【发布时间】:2016-03-30 10:48:27 【问题描述】:我是 AWS 的新手,我想在开始构建之前了解一些关键概念的工作原理。我找到了本教程,用于在节点 JS 中将图像直接上传到 AWS:
https://devcenter.heroku.com/articles/s3-upload-node#uploading-directly-to-s3
在我的 web 应用程序中,我使用的是 MongoDB,每个用户(用户架构)都可以更改他们的个人资料图片。在高层次上,我在想一旦用户选择了一张新图片并点击保存,我会按照上述步骤将新图片直接上传到 AWS 'bucket'。
然后我将如何将它呈现在用户的个人资料页面上?我是否需要在 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】:您可以将记录保存在将图像与用户相关联的数据库中。您可以为此使用任何数据库,MongoDB 或 DynamoDB 或 mysql 或您想使用的任何其他数据库。这里没有什么特别的事情需要您在 AWS 上使用一些特殊的数据库类型来将图像位置存储在 S3 上。
然后您可以将 S3 配置为将存储桶作为静态网站提供服务。当您想要显示图像时,您只需使用图像的 S3 URL。
编辑以回答 cmets 中的问题:
您应该阅读您链接的 Heroku 教程。请参阅此部分:
您可能希望为对象指定另一个自定义名称 使用文件已经命名的那个,这很有用 用于防止 S3 存储桶中的意外覆盖。这个名字可以 例如,与用户帐户的 ID 相关。
您可以在此处控制存储在 S3 上的文件的名称,可能使用用户 ID 作为名称。在同一代码块中,您可以使用用户个人资料图像的位置更新数据库。
【讨论】:
我明白了。并且该 URL 中会包含用户 ID(或用户的其他标识符)? 如果您将用户 ID 放在文件名中,则 URL 中只会包含用户 ID。 S3 对您应用的用户一无所知,因此它不会自动为您执行此操作。 @Mark B 上传图片后,我将图片的 aws 链接存储在我的数据库中,但我的链接已过期(即使在上传时删除了 expires 参数)。 @sacDahal 请不要将全新的问题作为 cmets 发布在其他问题上。以上是关于显示来自 AWS 的用户资料图片的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法用来自特定用户的推文触发 AWS lambda 函数