2011-12-18 72 views
5

我上传了4个对象到S3。对象键如下:为什么ListObjects将前缀作为数组中的单独对象返回?

4eec12eb0a588620cccad16f/MumDad70s.jpg 
4eec12eb0a588620cccad16f/NathanI-1.jpg 
4eec12eb0a588620cccad16f/ProfilePic.png 
4eec12eb0a588620cccad16f/nathan-orange.jpg 

我的代码,以请求的对象是:

var req = new ListObjectsRequest() 
    .WithBucketName(BucketName) 
    .WithPrefix(jobid + "/") 
    .WithDelimiter("/"); 
var objs = _s3Client.ListObjects(req); 

在响应,即使前缀实际上不是它自己的目标,而是只是一个字符串前缀到实际对象的关键,我得到以下对象返回:

4eec12eb0a588620cccad16f/ 
4eec12eb0a588620cccad16f/MumDad70s.jpg 
4eec12eb0a588620cccad16f/NathanI-1.jpg 
4eec12eb0a588620cccad16f/ProfilePic.png 
4eec12eb0a588620cccad16f/nathan-orange.jpg 

为什么前缀被返回,就好像它是一个唯一的对象?我如何只是返回具有指定前缀的文件,而不必后过滤列表以摆脱前缀对象?

+0

不是答案,而是解决方案 - 只需检查ListObjects上的getSize()是否大于0即可检测这些对象。我很想知道这个问题的真正答案,但... – 2012-03-02 03:41:30

+0

仍在寻找一个很好的解决此问题的方法。 – Adi 2017-02-27 14:17:51

回答

2

按这里(是的,我知道你很可能不会要求Java文档):http://docs.amazonwebservices.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3.html#listObjects%28com.amazonaws.services.s3.model.ListObjectsRequest%29

它指出:

如果调用listObjects与“富的前缀值/ “和在该桶上的值”/“的分隔符 (”foo/bar /“)返回包含一个键(”foo/boo“)和一个条目的对象列表 。要深入了解虚拟层次结构,请对listObjects调用另一个 将prefix参数设置为任何感兴趣的 通用前缀,以列出该前缀下的各个键。

强调我的。看起来这实际上是预期的功能 - 将所有密钥共同返回前缀。

+0

啊,很好找。我想诀窍是忽略以/ – 2012-03-08 13:38:48

+0

结尾的条目它看起来像基于文档,只有在设置了分隔符时才会发生 - 是否正确? – 2012-03-08 15:14:58

+0

@AndreiKrotkov我也是这么理解的。 – AASoft 2012-03-08 18:05:49

相关问题