Java 在S3存储桶中查找项目的位置

Java 在S3存储桶中查找项目的位置,java,amazon-web-services,amazon-s3,Java,Amazon Web Services,Amazon S3,我能够使用Java轻松地从S3存储桶中获取单个项目,并获取对象元数据,但似乎没有简单的方法来获取对象在存储桶中的位置。以下是我确实知道的事情: * * 但是,从列表末尾按字母顺序找出我的位置的最简单/最佳方法是什么 在这一点上,解决方案似乎相当复杂 public JSONObject objectPosition(String key) { ObjectListing listing = CLIENT.listObjects( bucketName, prefix ); Li

我能够使用Java轻松地从S3存储桶中获取单个项目,并获取对象元数据,但似乎没有简单的方法来获取对象在存储桶中的位置。以下是我确实知道的事情: * * 但是,从列表末尾按字母顺序找出我的位置的最简单/最佳方法是什么

在这一点上,解决方案似乎相当复杂

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;
}
publicJSONObject对象位置(字符串键){
ObjectListing=CLIENT.listObjects(bucketName,前缀);
列表键=新的ArrayList();
List summaries=listing.getObjectSummaries();
while(listing.isTruncated()){
对于(S3ObjectSummary s3o:摘要){
添加(s3o.getKey());
}
listing=CLIENT.listenxtbatchofobjects(listing);
summaries=listing.getObjectSummaries();
}
JSONObject jo=新的JSONObject();
put(“totalSize”,Integer.toString(keys.size());
jo.put(“position”,Integer.toString(key.indexOf(key));
返回jo;
}

但这意味着每次接触端点时,我不仅要在s3中查询所有对象及其键,还要找到需要检查的键,以便在一个大列表中检查其位置。不幸的是,调用之间的本地持久性不是一个选项——所以也许在s3存储桶中放置某种大小的文件是解决方案

如Michael sqlbot所述,对象的位置是其前缀和名称在词汇上相对于其他对象前缀和名称的位置。您需要列出所有对象才能获得对象的所有位置。 相反,尝试跟踪对bucket内容的更改,而不是轮询/扫描端点更改。扫描存储桶将产生S3列表API调用费用。
您可以尝试启用S3事件,然后文件创建/删除事件可以触发用Python或其他语言编写的AWS Lamba来处理或保存bucket中已更改的路径。每月第一次执行100万兰巴死刑是免费的

你试过什么?您是否有一些代码示例来提供更多的上下文?关于对象的位置,您的意思是什么?@SeanNieuwoudt,我已经更新了这个问题,以包括我所写的内容,因此列表按词汇顺序返回。如果在词汇上“较早”(较小)的对象被添加或删除,则对象的“位置”相对于开始发生变化;如果在词汇上“较晚”(较大),则对象的“位置”相对于结束发生变化,但“位置”不是一条有意义的信息。你到底想完成什么?@Michael sqlbot,我正试图跟踪我从S3文件创建对象的进度,在我从这些文件创建对象的过程中,我想知道我的进度。在此操作中未添加或删除S3文件