为什么ListObjects将前缀作为数组中的单独对象返回?

时间:2011-12-18 21:34:10

标签: amazon-s3

我向S3上传了4个对象。对象键如下:

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);

在响应中,即使前缀实际上不是它自己的对象,而是仅仅是实际对象的键前面的字符串,我得到以下 5 返回的对象:

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

为什么返回的前缀好像是一个唯一的对象?我如何只是返回具有指定前缀的文件,而不必对列表进行后置过滤以去除前缀对象?

1 个答案:

答案 0 :(得分:3)

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

它声明:

  

如果调用前缀值为“foo /”的listObjects和分隔符   此存储桶上的“/”值,返回一个ObjectListing   包含一个键(“foo / boo”)和公共前缀列表中的一个条目   ( “富/酒吧/”)即可。要深入了解虚拟层次结构,请创建另一个   调用listObjects将prefix参数设置为任何有趣的   用于列出该前缀下的各个键的公共前缀。

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