【发布时间】:2021-08-10 07:21:32
【问题描述】:
上下文
我正在构建一个模拟服务来学习 AWS。我希望用户能够上传声音文件(其他用户可以收听)。 为此,我需要将声音文件上传到 S3 和元数据,例如文件名、上传者名称、长度、S3 ID 到 RDS。 用户最好使用签名 URL 而不是通过首先将其上传到我的服务器并从那里上传到 S3 来将传输的数据加倍。
最好这将是事务性的,但从我收集的信息来看,没有给定的功能。为了实现这一点并最大程度地降低文件成功上传到 S3 而不是元数据到 RDS 的风险,反之亦然,我的最佳猜测如下:
我的解决方案
用词: 首先是尝试使用我在本地或服务器端生成的密钥 (uuid) 将文件上传到 S3。如果这成功了,我会向我的 API 发出请求以上传元数据,包括 RDS 的密钥。如果这不成功,我会从 S3 中删除该对象。
带代码:
uuid = get_uuid_from_server();
s3Client.putObject({.., key: uuid, ..}, function(err, data) {
if (err) {
reject(err);
} else {
resolve(data);
// Upload metadata to RDS through API-call to EC2 server. Remove s3 object with key:
uuid if this call is unsuccessful
}
});
根据我的学习,我的方法很少是最佳实践,但我无法找到有关此特定问题的任何好的信息。我的上述方法/解决方案是否符合最佳实践?
额外问题:出于安全目的在服务器端而不是客户端生成文件的密钥 (uuid) 是否有益?
【问题讨论】:
-
用户如何上传你的文件?使用 s3-presigned url 直接到 S3?还是先上传到后端,然后上传到 s3?
-
谢谢你,Marcin,我已经编辑了帖子并添加了这些信息。
标签: amazon-web-services amazon-s3 amazon-rds