ListObjectsが配列内の別のオブジェクトとしてプレフィックスを返すのはなぜですか?

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

プレフィックスが一意のオブジェクトであるかのように返されるのはなぜですか?プレフィックスオブジェクトを取り除くためにリストをポストフィルタ処理することなく、指定されたプレフィックスを持つファイルをちょうど返しますか?

5
答えではなく、解決策です。ListObjectsのgetSize()が> 0かどうかを確認するだけで、これらのオブジェクトを検出できます。私はこれに対する本当の答えを知りたいです...
追加された 著者 Andrei Krotkov,
まだこの動作のために良い仕事を探しています。
追加された 著者 Adi,

1 答え

As per here (and yes, I realize you're probably not asking for the Java documentation): http://docs.amazonwebservices.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3.html#listObjects%28com.amazonaws.services.s3.model.ListObjectsRequest%29

それは述べている:

接頭辞の値が "foo /"で区切り記号がlistObjectsの場合   このバケット上の "/"の値、ObjectListingが返されます   共通のプレフィックスリストに1つのキー( "foo/boo")と1つのエントリが含まれています   ( "foo/bar /")]をクリックします。仮想階層をより深く見るには、別の   プレフィックスパラメータを任意の値に設定するlistObjectsを呼び出す   その接頭辞の下にある個々のキーをリストするための共通の接頭辞。

強調する私。すべてのキーに共通の接頭辞を返すことは、実際には意図した機能であるように見えます。

3
追加された
ドキュメントに基づいているように見えますが、これはデリミタが設定されている場合にのみ発生します - 正しいのでしょうか?
追加された 著者 Andrei Krotkov,
ああ、良い発見。私はそのトリックは、
追加された 著者 Nathan Ridley,
@AASoftデリミタが指定されているかどうかは関係ありません。
追加された 著者 Adi,
@AndreiKrotkovそれは私もそれを理解する方法です。
追加された 著者 AASoft,
Amazonが最近ロジックを変更したのは素晴らしいことです(私はそうしていたかどうかわかりませんが)。この答えが書かれたときから5年前にパス区切りを持つこととしないことの間に違いがありました。
追加された 著者 AASoft,