Java 上传后Amazon S3文件可用性

Java 上传后Amazon S3文件可用性,java,amazon-s3,Java,Amazon S3,我想在测试用例期间上传一个文件,然后立即下载以验证文件是否已上传。我使用的密钥已经上传到S3 当我的上传完成后,我进行下载,但不知何故,我得到了这个文件的早期版本 我的代码如下所示: final ObjectMetadata ObjectMetadata=new ObjectMetadata(); objectMetadata.setContentType(binaryDataReference.getContentType()); objectMetadata.setContentLength

我想在测试用例期间上传一个文件,然后立即下载以验证文件是否已上传。我使用的密钥已经上传到S3

当我的上传完成后,我进行下载,但不知何故,我得到了这个文件的早期版本

我的代码如下所示:

final ObjectMetadata ObjectMetadata=new ObjectMetadata();
objectMetadata.setContentType(binaryDataReference.getContentType());
objectMetadata.setContentLength(data.length);
setContentEncoding(xmlEncoding.getCharset());
s3Client.putObject(BUCKET_名称、键、新ByteArrayInputStream(数据)、objectMetadata);
线程。睡眠(30000);//我这么做是因为我认为这是个时间问题。
S3Object object=s3Client.getObject(BUCKET\u名称,binaryDataKey)

但我得到的对象不是我刚刚上传的对象

我需要做点什么吗?或者有人知道这种方法有什么好处吗?

就是这样:

美国标准地区的Amazon S3存储桶提供。所有其他地区的Amazon S3存储桶都提供 新对象和最终对象的put的读写一致性 覆盖放置和删除的一致性

这意味着,在写入新对象后,只要它不在美国标准区域内,您就可以立即读取它。否则-即,如果您在美国标准地区,或者您正在覆盖或删除现有对象-您只能保证“最终”您的操作结果将可见

我曾经问Amazon,在覆盖一个对象并成功读回最新版本后,是否会保证在同一个连接上的所有后续读取也会返回最新版本。也就是说,如果我写了第2版,读了第2版,我就再也不会读第1版了吗?他们没有回应


如果您确实需要更强的一致性,那么,尽管我上次检查时GCS比S3稍微贵一点。

我注意到,使用web界面将文件上传到S3或从S3快速下载文件。因此,我养成了先下载要替换的文件的习惯。S3由许多物理服务组成,我想在向所有人宣传最新版本时会出现一些时间问题。我不知道具体细节。链接的常见问题解答中没有更多关于一致性的评论。以下是指向文档的链接: