J'essaie d'obtenir la liste de Object
dans un dossier spécifique de mon compartiment.
Je sais que pour obtenir une liste de tous mes objets, je le fais:
$objects = $client->getIterator('ListObjects', array(
'Bucket' => $bucket
));
Je souhaite obtenir uniquement les objets situés dans le dossier my/folder/test
. J'ai essayé d'ajouter
'key' => "my/folder/test",
Et
'prefix' => "my/folder/test",
Mais cela retourne simplement tous les objets de mon seau.
Vous devez utiliser Prefix
pour limiter la recherche à un répertoire spécifique (un préfixe commun).
$objects = $client->getIterator('ListObjects', array(
"Bucket" => $bucket,
"Prefix" => "your-folder/"
));
La réponse est ci-dessus, mais j'ai pensé fournir un exemple de travail complet pouvant être copié et collé directement dans un fichier php et exécuté
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>";
}
"S3Client :: factory est obsolète dans SDK 3.x, sinon la solution est valide", a déclaré RADU.
Voici la solution mise à jour pour aider les autres utilisateurs de cette réponse:
# composer dependencies
require '/vendor/aws-autoloader.php';
//AWS access info DEFINE command makes your Key and Secret more secure
if (!defined('awsAccessKey')) define('awsAccessKey', 'ACCESS_KEY_HERE');/// <- put in your key instead of ACCESS_KEY_HERE
if (!defined('awsSecretKey')) define('awsSecretKey', 'SECRET_KEY_HERE');/// <- put in your secret instead of SECRET_KEY_HERE
use Aws\S3\S3Client;
$config = [
's3-access' => [
'key' => awsAccessKey,
'secret' => awsSecretKey,
'bucket' => 'bucket',
'region' => 'us-east-1', // 'US East (N. Virginia)' is 'us-east-1', research this because if you use the wrong one it won't work!
'version' => 'latest',
'acl' => 'public-read',
'private-acl' => 'private'
]
];
# initializing s3
$s3 = Aws\S3\S3Client::factory([
'credentials' => [
'key' => $config['s3-access']['key'],
'secret' => $config['s3-access']['secret']
],
'version' => $config['s3-access']['version'],
'region' => $config['s3-access']['region']
]);
$bucket = 'bucket';
$objects = $s3->getIterator('ListObjects', array(
"Bucket" => $bucket,
"Prefix" => 'filename' //must have the trailing forward slash for folders "folder/" or just type the beginning of a filename "pict" to list all of them like pict1, pict2, etc.
));
foreach ($objects as $object) {
echo $object['Key'] . "<br>";
}