2015-08-21 18 views
6

mein S3 Eimer gegeben, die Bilder in einer Struktur enthält etwa so:(Ordner) in S3 - aws sdk v3 php

root/portraits/portrait_001.jpg 
root/landscapes/landscape_001.jpg 

wo Wurzel ist mein Eimer, und es gibt keine andere Dateien in meinem root, nur diese Ordner (Objekte), wie bekomme ich eine Liste nur dieser Objekte?

portraits/ 
landscapes/ 

Ich bin vertraut mit den Trennzeichen und Präfix in dem Listobjects nennen verwenden.

Wenn ich den folgenden Code, erhalte ich keine Ergebnisse:

$objects = $s3->getIterator('ListObjects', array(
    'Bucket' => $bucket, 
    'Delimiter' => '/', 
)); 

foreach($objects as $object) 
    echo $object['Key'] . "\n"; 

Wenn ich ein Trennzeichen nicht verwenden, ich habe alles bekommen, offensichtlich.

Ich kann kein Präfix verwenden, da die Objekte, die ich möchte, root-level sind. Sonst habe ich kein Problem mit dem Präfix zu sagen, nur die Dateien in 'Porträts /'

von meinen Recherchen, habe ich nur gefunden Lösungen aus früheren Jahren, die nur für die aws php sdk v1 oder gelten v2, und ich hatte kein Glück, diese zu versuchen (v3 ist ganz anders)

Irgendwelche Vorschläge? Ich habe das Gefühl, etwas Einfaches zu vermissen, aber wenn ich die Dokumentation durchsuche, kann ich nichts finden, was mir helfen könnte. Als letztes Mittel werde, muss ich nur noch mit Hand halten ein Array

$categories = ['portraits/', 'landscapes/'] 

erklärt Aber das ist in dem Fall nicht ideal, wo ich mehr Kategorien in der Zukunft hinzugefügt werden soll, und über keine Sorgen machen eine andere Kategorie manuell hinzufügen.

Jede Hilfe wäre sehr dankbar :)

bearbeiten - Lösung

ich an den falschen Stellen während meiner Objekt-Dumps, aber schließlich sah von den gemeinsamen Präfixe in dem zurückgegebenen Ergebnis gesucht haben muss ein Listobjects ruft mit einem Trennzeichen '/', etwa so:

$s3->listObjects(array('Bucket' => $bucket, 'Delimiter' => '/')); 
+0

Haben Sie versucht, die Liste der 'CommonPrefixes' zurück von' ListBucket' mit? https://docs.aws.amazon.com/AmazonS3/latest/dev/ListingKeysHierarchy.html –

+0

Ursprünglich konnte ich die gemeinsamen Präfixe nirgendwo finden, aber vielleicht übersah ich das während meiner Objekt-Dumps an den falschen Stellen.Ich habe sie gerade gefunden. Danke für die Hilfe :) –

Antwort

4

Verzeichnisse nicht existieren tatsächlich in Amazon S3. Die Management Console ermöglicht jedoch die Erstellung von Ordnern und die Unterstützung von Pfaden unterstützt die Illusion von Verzeichnissen.

Zum Beispiel hat das Objekt bar.jpg, das im Verzeichnis foo gespeichert ist, einen Pfad von /foo/bar.jpg. Der Trick ist, dass das Objekt eigentlich foo/bar.jpg genannt wird und nicht nur bar.jpg. Die meisten Benutzer würden den Unterschied nicht einmal bemerken.

Von der API wird die Fähigkeit zum Auflisten von Verzeichnissen über das Konzept CommonPrefixes bereitgestellt, das genauso aussieht wie Verzeichnispfade und aus dem Teil der Objektnamen ("Schlüssel") vor dem abschließenden Schrägstrich besteht.

Siehe: Listing Keys Hierarchically Using a Prefix and Delimiter