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

Nat*_*ley 5 amazon-s3

我上传了4个对象到S3.对象键如下:

4eec12eb0a588620cccad16f/MumDad70s.jpg
4eec12eb0a588620cccad16f/NathanI-1.jpg
4eec12eb0a588620cccad16f/ProfilePic.png
4eec12eb0a588620cccad16f/nathan-orange.jpg
Run Code Online (Sandbox Code Playgroud)

我请求对象的代码是:

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

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

4eec12eb0a588620cccad16f/
4eec12eb0a588620cccad16f/MumDad70s.jpg
4eec12eb0a588620cccad16f/NathanI-1.jpg
4eec12eb0a588620cccad16f/ProfilePic.png
4eec12eb0a588620cccad16f/nathan-orange.jpg
Run Code Online (Sandbox Code Playgroud)

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

AAS*_*oft 4

按照此处(是的,我意识到您可能不需要 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”)和公共前缀列表中的一个条目(“foo”) /酒吧/”)。要更深入地了解虚拟层次结构,请再次调用 listObjects,将 prefix 参数设置为任何有趣的公共前缀,以列出该前缀下的各个键。

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