编程语言
首页 > 编程语言> > java-上传后Amazon S3文件的可用性

java-上传后Amazon S3文件的可用性

作者:互联网

我想在测试用例中上传文件,然后立即下载以确认文件已上传.我使用了已经升级到S3的密钥.

上传完成后,我进行了下载,但是以某种方式获得了该文件的先前版本.

我的代码如下所示:

最终的ObjectMetadata objectMetadata = new ObjectMetadata();
        objectMetadata.setContentType(binaryDataReference.getContentType());
        objectMetadata.setContentLength(data.length);
        objectMetadata.setContentEncoding(xmlEncoding.getCharset());
        s3Client.putObject(BUCKET_NAME,键,新的ByteArrayInputStream(data),objectMetadata);
线程.睡眠(30000); //之所以这样做,是因为我认为这是一个计时问题.
S3Object对象= s3Client.getObject(BUCKET_NAME,binaryDataKey);

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

我需要做点什么还是有人知道这种方法有什么用?

解决方法:

S3 works就是这样:

Amazon S3 buckets in the US Standard region provide 07001. Amazon S3 buckets in all other regions provide
read-after-write consistency for PUTS of new objects and eventual
consistency for overwrite PUTS and DELETES.

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

我曾经问过亚马逊,是否在覆盖一个对象并成功读回最新版本后,是否可以保证在同一连接上进行的所有后续读取也都将返回最新版本.也就是说,如果我编写了版本2并阅读了版本2,我将再也不会阅读版本1吗?他们没有回应.

如果您确实需要更强的一致性,则可以选择Google Cloud Storage provides read-after-update and read-after-delete consistency,尽管我上次检查时GCS比S3贵一些.

标签:amazon-s3,java
来源: https://codeday.me/bug/20191120/2042211.html