2012-09-29 68 views
11

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

+0

我不确定,但不能 您将ACL设置为只读此对象?我的意思是,为你上传的每个对象。 – Prinzhorn

+0

我将ACL设置为公开,因为任何人都可以看到这些文件。 – CyberJunkie

回答

6

从上面我的意见不起作用。我认为WRITE ACL也适用于对象,但它只适用于桶。

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

有关更多信息,请参见Amazon S3 ACL for read-only and write-once access

+0

谢谢!我会尝试。 – CyberJunkie

2

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

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

+0

谢谢我没有想到这一点。如果我可以在AWS中进行设置,那么无法更新/覆盖的用户将是理想选择。 – CyberJunkie

+1

您必须仔细检查文档。我不知道S3是否理解_write_和_update_之间的区别。我知道默认情况下(即完全权限),写入和更新被视为同一件事。 –

1

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

生成一个随机密钥。 尝试在允许空条目的UNIQUE约束的字段中插入/更新您的DB的密钥。 如果失败,则使用该密钥,直到获得唯一密钥。

然后把你的文件放在s3上,你的密钥,你知道是独一无二的。