在http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html,我发现了以下内容:
Amazon S3从不添加部分对象;如果您收到成功响应,Amazon S3会将整个对象添加到存储桶中。
但那是在谈论我收到成功回应。我保证在列表中列出对象时,其他客户端是否会看到该对象 - 直到整个对象上传为止?
我想将S3用作“假脱机”目录 - 我会在那里上传文件,而另一个客户端会定期列出文件然后下载它们。我不希望它试图下载未完全上传的文件。
答案 0 :(得分:10)
答案与此相同:
Amazon S3从不添加部分对象
在上传完成之前,正在上传的内容在技术上并不在“桶中”。
S3,您可能知道,不是分层文件系统。它至少有两个重要的组件,后备存储和索引,与典型的文件系统不同,它们是分开的......因此,当你编写一个对象时,你并没有真正地“编写”它。上传对象会将对象保存到后备存储,然后 将其添加到存储桶的索引中,该索引由GET
和其他请求用于获取存储的数据和元数据以供检索。 / p>
如果索引中没有条目,则无法访问该对象。所以你很好。下载尚未完成上传的对象是不可能的。从技术上讲,该对象尚不存在。
同样,如果一个对象已经存在并且您开始覆盖它,那么任何试图下载它的人都会得到该对象的“旧”副本,至少在您的上传完成之前,即使在未启用版本控制的存储桶中也是如此 - 覆盖不会覆盖实际对象,它会覆盖索引条目,这仅在上载完成时才会发生。请注意,此机制似乎负责应用于覆盖现有对象的PUT
请求的最终一致性模型。
注意,关于数据完整性:请确保无论您使用何种上传设置Content-MD
请求标头。通过为S3提供检测传输错误的机制并在上传的内容不匹配时强制失败,可以防止上传损坏。