36

Objectバケット内の特定のフォルダーの下にあるリストを取得しようとしています。

私が行うすべてのオブジェクトのリストを取得するには、次のことを知っています。

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

フォルダーの下のオブジェクトのみを取得したいmy/folder/test。追加してみました

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

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

ただし、バケット内のすべてのオブジェクトが返されるだけです。

4

3 に答える 3

32

答えは上記ですが、コピーしてphpファイルに直接貼り付けて実行できる完全な動作例を提供すると思いました

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>";
}
于 2014-11-24T03:08:16.617 に答える
0

「S3Client::factory は SDK 3.x で廃止されました。それ以外の場合、ソリューションは有効です」と RADU は述べています

この回答に出くわした他の人を助けるための更新されたソリューションは次のとおりです。

# 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>";
}
于 2019-01-02T19:39:22.933 に答える