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 是否理解 write 和 update 之间的区别。我知道默认情况下(即完全权限),写入和更新被视为同一件事。【参考方案3】:如果您使用数据库将每个文件的密钥存储在 s3 存储桶上,这是我的建议。
生成随机密钥。 尝试在具有允许空条目的唯一约束的字段中插入/更新您的数据库的键。 如果失败,则密钥已被使用,重复此操作,直到获得唯一密钥。
然后使用您知道是唯一的密钥将您的文件放在 s3 上。
【讨论】:
以上是关于Amazon S3 避免覆盖同名对象的主要内容,如果未能解决你的问题,请参考以下文章
django-storages with Amazon S3 - 防止覆盖