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

标签 java amazon-s3

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

上传完成后,我进行了下载,但不知何故我得到了该文件的先前版本。

我的代码看起来像这样:

final ObjectMetadata objectMetadata = new ObjectMetadata(); objectMetadata.setContentType(binaryDataReference.getContentType()); objectMetadata.setContentLength(data.length); objectMetadata.setContentEncoding(xmlEncoding.getCharset()); s3Client.putObject(BUCKET_NAME, key, new ByteArrayInputStream(data), objectMetadata); 线程. sleep (30000);//我这样做是因为我认为这是一个时间问题。 S3Object object = s3Client.getObject(BUCKET_NAME, binaryDataKey);

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

我需要做些什么吗?有人知道这种方法有什么问题吗?

最佳答案

这就是S3 works的方式:

Amazon S3 buckets in the US Standard region provide eventual consistency. 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 稍微贵一些。

关于java - 上传后 Amazon S3 文件可用性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30650976/

相关文章:

java - 是否可以用 Birt 或替代品填充模板(.xls、.pdf、ppt)?

java - 有没有办法可以检查哈希集(Java)的重复输入?

java - 用于列出具有部分 uuid 的对象的 S3 前缀

amazon-web-services - 云前端支持 Nginx(S3 的代理)随机丢失已缓存的项目?

java - 检测 html 文件时 HttpServletResponse 内容类型为 null

java - 无法从数组中获取实际值,它只是显示 "NULL"

java.util.ConcurrentModificationException 与迭代器(字符移动)

c# - AWS S3 - ListObjects 返回不完整的目录列表

amazon-web-services - 无法删除其中包含文件的 S3 存储桶

mongodb - 查询数据以在AWS中实现最小延迟的最佳方法