使用php列出Amazon S3存储桶中所有文件的快速方法?

Hit*_*esh 12 php cdn amazon-s3 amazon-web-services

我有一个亚马逊s3桶,里面有成千上万的文件名.获取列出存储桶中所有文件名的所有文件或文本文件列表的最简单方法是什么?

我试过了listObject(),但似乎只列出了1000个文件.

amazon-s3-returns-only-1000-entries-for-bucket-and-all-for-another-bucket-u S3-Provider-does-not-than-than-1000-items-from-bucket

- > 列出使用适用于PHP的AWS开发工具包的密钥, 但在aws文档中我读过

max-keys - string - 可选 - 方法调用返回的最大结果数.返回的列表将不包含比指定值更多的结果,但可能返回更少的结果.默认值为1000.

AWS DOC FOR list_objects

有没有办法列出所有内容并使用AWS PHP SDK将其打印到文本文件?

可能的重复: 快速到列表所有文件在亚马逊-s3桶

我转发了这个问题,因为我正在寻找php中的解决方案.

代码:

$s3Client = S3Client::factory(array('key' => $access, 'secret' => $secret));

$response = $s3Client->listObjects(array('Bucket' => $bucket, 'MaxKeys' => 1000, 'Prefix' => 'files/'));
$files = $response->getPath('Contents');
$request_id = array();
foreach ($files as $file) {
    $filename = $file['Key'];
    print "\n\nFilename:". $filename;

 }
Run Code Online (Sandbox Code Playgroud)

Jer*_*lom 13

要获得超过1000个对象,您必须使用该Marker参数发出多个请求,以告知S3您为每个请求停止的位置.使用AWS SDK for PHP 的Iterators功能可以更轻松地获取所有对象,因为它封装了发出多个API请求的逻辑.试试这个:

$objects = $s3Client->getListObjectsIterator(array(
    'Bucket' => $bucket,
    'Prefix' => 'files/'
));

foreach ($objects as $object) {
    echo $object['Key'] . "\n";
}
Run Code Online (Sandbox Code Playgroud)

使用最新的PHP SDK(截至2016年3月),代码必须像这样编写:

$objects = $s3Client->getIterator('ListObjects', array(
    'Bucket' => $bucket,
    'Prefix' => 'files/'
));
Run Code Online (Sandbox Code Playgroud)


小智 5

使用分页器获取所有文件

    $client = new S3Client([
        'version' => AWS_S3_CLIENT_FACTORY_VERSION,
        'region' => AWS_S3_CLIENT_FACTORY_REGION,

    ]);
    $objects = $client->getPaginator('ListObjects', ['Bucket' => "my-bucket"]);
    foreach ($objects as $listResponse) {
        $items = $listResponse->search("Contents[?starts_with(Key,'path/to/folder/')]");
        foreach($items as $item) {
            echo $item['Key'] . PHP_EOL;
        }
    }
Run Code Online (Sandbox Code Playgroud)

要获取所有文件,请将搜索更改为:

$listResponse->search("Contents[*]");
Run Code Online (Sandbox Code Playgroud)