Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon s3 为什么ListObjects在数组中作为单独的对象返回前缀?_Amazon S3 - Fatal编程技术网

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

Amazon s3 为什么ListObjects在数组中作为单独的对象返回前缀?,amazon-s3,Amazon S3,我上传了4个对象到S3。对象关键点如下所示: 4eec12eb0a588620cccad16f/MumDad70s.jpg 4eec12eb0a588620cccad16f/NathanI-1.jpg 4eec12eb0a588620cccad16f/ProfilePic.png 4eec12eb0a588620cccad16f/nathan-orange.jpg 我请求对象的代码是: var req = new ListObjectsRequest() .WithBucketName

我上传了4个对象到S3。对象关键点如下所示:

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
为什么返回前缀时将其视为唯一的对象?如何返回带有指定前缀的文件,而不必对列表进行后期筛选以除去前缀对象?

根据此处(是的,我知道您可能没有要求提供Java文档):

它说:

如果使用前缀值“foo/”和分隔符调用listObjects 值为“/”时,将返回一个ObjectList 包含一个键(“foo/boo”)和公共前缀列表中的一个条目 (“foo/bar/”)。要深入了解虚拟层次结构,请创建另一个 调用listObjects将prefix参数设置为任何感兴趣的 common prefix可列出该前缀下的各个键


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

不是答案,而是解决方案—您可以通过检查ListObjects上的getSize()是否大于0来检测这些对象。我很想知道这个问题的真正答案,不过…仍然在为这种行为寻找一个好的解决办法。啊,很好的发现。我想诀窍是忽略以/结尾的条目。根据文档,这只有在设置了分隔符的情况下才会发生-对吗?@AndreiKrotkov我也是这么理解的。@AASoft不管是否提供了分隔符。如果亚马逊最近更改了逻辑(我不知道他们是否更改了),那就太好了,但是在5年前写下这个答案时,有和没有路径分隔符之间肯定有区别。