在 http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html ,我发现了以下内容:
Amazon S3 never adds partial objects; if you receive a success response, Amazon S3 added the entire object to the bucket.
但那是说我收到了成功的回应。我是否可以保证在列出存储桶中的对象时没有其他客户端会看到该对象——直到整个对象被上传?
我想将 S3 用作“假脱机”目录——我将在那里上传文件,另一个客户端将定期列出文件然后下载它们。我不希望它尝试下载未完全上传的文件。
最佳答案
答案与此相同:
Amazon S3 never adds partial objects
在上传完成之前,正在上传的内容在技术上并不“在”存储桶中。
您可能知道,S3 不是分层文件系统。它至少有两个重要的组成部分,后备存储和索引,与典型的文件系统不同,它们是分开的……所以当你写一个对象时,你并没有真正“就地”写它。上传对象会将对象保存到后备存储,然后将其添加到存储桶的索引中,该索引由
GET
使用。以及其他获取存储数据和元数据以进行检索的请求。如果索引中没有条目,则无法访问该对象。所以你很好。下载尚未完成上传的对象是不可能的。从技术上讲,该对象尚不存在。
类似地,如果一个对象已经存在并且您开始覆盖它,那么任何尝试下载它的人都会至少在上传完成之前获得该对象的“旧”副本,即使在未启用版本控制的存储桶中也是如此——覆盖不会覆盖实际对象,它会覆盖索引条目,这仅在上传完成时发生。请注意,此机制似乎负责适用于
PUT
的最终一致性模型。覆盖现有对象的请求。请注意,关于数据完整性:请确保无论您使用什么上传设置
Content-MD
请求头。这通过为 S3 提供一种机制来检测传输错误并在上传的内容不匹配时强制失败,从而防止上传损坏。
关于amazon-s3 - 亚马逊 S3 : Can clients see the file before upload is complete,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38173710/