我向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
为什么返回的前缀好像是一个唯一的对象?我如何只是返回具有指定前缀的文件,而不必对列表进行后置过滤以去除前缀对象?
答案 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参数设置为任何有趣的 用于列出该前缀下的各个键的公共前缀。
强调我的。看起来这实际上是预期的功能 - 返回所有键共有的前缀。