AmazonS3Client不会在终止前缀上返回密钥

时间:2016-04-02 02:10:14

标签: java amazon-web-services amazon-s3

我在Java中使用AWS SDK中的AmazonS3Client时遇到了奇怪的行为。让我们举个例子说我有一个桶(org.magic.bucket),其中包含以下内容:

data/2016/03/10/
data/2016/03/11/
data/2016/03/12/
data/2016/03/13/
data/2016/03/14/
data/2016/03/15/
data/2016/03/16/

每个人都有一个文件集合,例如:

A.txt
B.txt
C.txt

我有一个java代码片段,如下所示:

ObjectListing objectListing = s3Client.listObjects("org.magic.bucket", "data/2016/03/1")

while (objectListing.isTruncated()) {
    for (S3ObjectSummary objectSummary : objectListing.getObjectSummaries()) {
      System.out.println(objectSummary.getKey());
    }
    objectListing = s3Client.listNextBatchOfObjects(objectListing);
 }

返回:

 data/2016/03/10/A.txt
 data/2016/03/10/B.txt
 data/2016/03/10/C.txt
 data/2016/03/11/A.txt
 data/2016/03/11/B.txt
 data/2016/03/11/C.txt
 data/2016/03/12/A.txt
 etc ...

我期待,但是当我用" data / 2016/03/11"作为前缀我没有返回任何数据。这是有问题的,因为我只需处理"文件夹中的文件"。是什么给了什么?

1 个答案:

答案 0 :(得分:0)

如果你设置(或你正在使用的代码集)分隔符(在发送给S3 API的请求中)到/那么你看到的结果是正确的 - 因为没有对象前缀data/2016/03/11 出现在下一个分隔符之前。

要求data/2016/03/11告诉S3您正在寻找更像data/2016/03/11A.txt的内容 - 名称中不再有斜杠。

如果您将前缀设置为data/2016/03/11/(添加尾部斜杠),那么您应该得到预期的结果。