2013-09-08 11 views
21

Ich versuche, die Liste der Object unter einem bestimmten Ordner in meinem Bucket zu bekommen.Objekte in einem bestimmten Ordner auf Amazon S3 auflisten

Ich weiß, dass eine Liste aller meiner Objekte erhalten ich tun:

$objects = $client->getIterator('ListObjects', array(
    'Bucket' => $bucket 
)); 

ich nur die Objekte unter dem Ordner my/folder/test erhalten möchten. Ich habe versucht,

 'key' => "my/folder/test", 

Und

 'prefix' => "my/folder/test", 

Zugabe Aber es gibt einfach alle Objekte in meinem Eimer.

Antwort

46

Sie müssen Prefix verwenden, um die Suche auf ein bestimmtes Verzeichnis (ein gemeinsames Präfix) zu beschränken.

$objects = $client->getIterator('ListObjects', array(
    "Bucket" => $bucket, 
    "Prefix" => "your-folder/" 
)); 
+0

Die Groß- und Kleinschreibung, also muss es ‚Präfix sein 'wo ich' Präfix 'geschrieben habe. :\ Danke für die Hilfe. –

+0

Kann dies geändert werden, um nur die Buckets innerhalb eines Buckets aufzulisten (1-Level-Tiefe)? – raphael75

+0

@ raphael75 dafür finden Sie ['s3.listBuckets()'] (https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/examples-s3-buckets.html) Methode – balexandre

12

Die Antwort ist oben aber ich dachte, ich würde ein komplettes Arbeitsbeispiel liefern, die direkt in eine PHP-Datei kopiert und eingefügt werden können und lief

use Aws\S3\S3Client; 

require_once('PATH_TO_API/aws-autoloader.php'); 

$s3 = S3Client::factory(array(
    'key' => 'YOUR_KEY', 
    'secret' => 'YOUR_SECRET', 
    'region' => 'us-west-2' 
)); 

$bucket = 'YOUR_BUCKET_NAME'; 

$objects = $s3->getIterator('ListObjects', array(
    "Bucket" => $bucket, 
    "Prefix" => 'some_folder/' //must have the trailing forward slash "/" 
)); 

foreach ($objects as $object) { 
    echo $object['Key'] . "<br>"; 
} 
+0

S3Client :: Factory ist in SDK 3.x veraltet, andernfalls ist die Lösung gültig – Radu

+3

für den Ersatz der Factory-Methode, verwenden Sie diese, $ s3Client = neuer S3Client ([ 'version' => '2006-03-01 ‘ 'Region' => 'AP-S-1', 'Credentials' => [ 'Schlüssel' => 'YourKey', 'Geheimnis' => 'yoursecreky' ] ]); –