【问题标题】:Find position of an item in an S3 Bucket在 S3 存储桶中查找项目的位置
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 2020-05-28
    • 2019-09-16
    • 2016-03-02
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多