我在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"作为前缀我没有返回任何数据。这是有问题的,因为我只需处理"文件夹中的文件"。是什么给了什么?
答案 0 :(得分:0)
如果你设置(或你正在使用的代码集)分隔符(在发送给S3 API的请求中)到/
那么你看到的结果是正确的 - 因为没有对象前缀data/2016/03/11
出现在下一个分隔符之前。
要求data/2016/03/11
告诉S3您正在寻找更像data/2016/03/11A.txt
的内容 - 名称中不再有斜杠。
如果您将前缀设置为data/2016/03/11/
(添加尾部斜杠),那么您应该得到预期的结果。