【发布时间】:2016-11-18 21:43:48
【问题描述】:
我可以使用 Java 从我的 S3 存储桶中轻松获取单个项目,并获取对象元数据,但似乎没有简单的方法来获取存储桶中对象的位置。以下是我所知道的事情:
* There is a workaround in place to list all the objects
* There is some sort of marker system in place for continuing ListObjectRequests
但是,从列表末尾按字母顺序计算我的位置的最简单/最佳方法是什么?
此时,解决方案似乎相当复杂
public JSONObject objectPosition(String key) {
ObjectListing listing = CLIENT.listObjects( bucketName, prefix );
List<String> keys = new ArrayList<String>();
List<S3ObjectSummary> summaries = listing.getObjectSummaries();
while (listing.isTruncated()) {
for(S3ObjectSummary s3o : summaries) {
keys.add(s3o.getKey());
}
listing = CLIENT.listNextBatchOfObjects (listing);
summaries = listing.getObjectSummaries();
}
JSONObject jo = new JSONObject();
jo.put("totalSize", Integer.toString(keys.size()));
jo.put("position", Integer.toString(key.indexOf(key)));
return jo;
}
但这意味着每次我的端点被触摸时,我不仅要在 s3 中查询所有对象及其键,而且还必须在一个大列表中找到我需要检查位置的键.不幸的是,调用之间的本地持久性不是一个选项 - 所以也许在 s3 存储桶中放置某种大小的文件是解决方案?
【问题讨论】:
-
你试过什么?你有一些代码示例来提供更多上下文吗?
-
按对象的位置是什么意思?
-
@SeanNieuwoudt,我已经更新了问题以包含我迄今为止所写的内容
-
列表按词法顺序返回。如果词法上“较早”(较小)对象被添加或删除,则对象的“位置”相对于开头发生变化,或者如果词法上“较晚”(较大)但“位置”不是有意义的信息,则相对于结尾发生变化.你到底想完成什么?
-
@Michael-sqlbot,我正在尝试跟踪从 S3 文件创建对象的进度,当我从这些文件创建对象时,我想知道我的进度。此操作中没有添加或删除 S3 文件
标签: java amazon-web-services amazon-s3