Amazon S3 避免覆盖同名对象

Posted

技术标签:

【中文标题】Amazon S3 避免覆盖同名对象【英文标题】:Amazon S3 avoid overwriting objects with the same name 【发布时间】:2012-09-21 05:07:11 【问题描述】:

如果我将文件名与存储桶中对象的文件名相同的文件上传到 S3,它会覆盖它。有哪些选项可以避免覆盖具有相同文件名的文件?我在我的存储桶中启用了版本控制,认为它可以解决问题,但对象仍然被覆盖。

【问题讨论】:

我不确定,但您不能将此对象的 ACL 设置为只读吗?我的意思是,对于您上传的每个对象。 我将 ACL 设置为公开,因为任何人都可以看到这些文件。 【参考方案1】:

我上面的评论不起作用。我认为WRITE ACL 也适用于对象,但它只适用于存储桶。

由于您启用了版本控制,您的对象不会被覆盖。但如果您未在 GET 请求或 URL 中指定版本,则将采用最新版本。这意味着当您将对象放入 S3 时,您需要保存响应告诉您的 versionID,以便检索第一个对象。

请参阅Amazon S3 ACL for read-only and write-once access 了解更多信息。

【讨论】:

【参考方案2】:

您还可以配置具有有限权限的 IAM 用户。写入仍然是写入(即更新),但无论如何使用 IAM 用户是最佳实践。

所有者(即您的“长期访问密钥和秘密密钥”)始终拥有完全控制权,除非您完全想方设法禁用它。

【讨论】:

谢谢,我还没有想到。如果我可以在 AWS 中进行设置,那么无法更新/覆盖的用户将是理想的选择。 您必须仔细检查文档。我不知道 S3 是否理解 writeupdate 之间的区别。我知道默认情况下(即完全权限),写入和更新被视为同一件事。【参考方案3】:

如果您使用数据库将每个文件的密钥存储在 s3 存储桶上,这是我的建议。

生成随机密钥。 尝试在具有允许空条目的唯一约束的字段中插入/更新您的数据库的键。 如果失败,则密钥已被使用,重复此操作,直到获得唯一密钥。

然后使用您知道是唯一的密钥将您的文件放在 s3 上。

【讨论】:

以上是关于Amazon S3 避免覆盖同名对象的主要内容,如果未能解决你的问题,请参考以下文章

如何自动给文件命名,避免覆盖同名文件?

django-storages with Amazon S3 - 防止覆盖

我可以一次为 Amazon S3 存储桶中的所有对象设置 expires 标头吗?

我可以更新现有的 Amazon S3 对象标头属性吗?

python前端jQuery入门

使用 Amazon S3 阻止公有访问