xad*_*ict 3 php sdk amazon-s3 amazon-web-services phar
我正在尝试将存储桶中的对象列表放入有组织的列表中,包含文件夹和文件.
在文档中,S3列表键分层使用前缀和分隔符,Amazon声明当前选定目录中有其他目录时:
Amazon S3对这些键进行分组并返回单个CommonPrefixes元素
我有以下代码:
$iterator = $client->getIterator(
'ListObjects',
array(
'Bucket' => $bucket,
'Prefix' => $dir,
'Delimiter' => '/'
)
);
Run Code Online (Sandbox Code Playgroud)
哪个做得好.它获取存储桶中的所有对象(与低级ListObjects方法不同,它返回最多1000个对象)并按字母顺序显示它们.
如果我告诉这个迭代器返回array如此:
$objects = $iterator->toArray();
Run Code Online (Sandbox Code Playgroud)
然后我可以array在foreach循环中使用它
foreach ($objects as $object) {
echo $object['Key'] . "<br/>\n";
}
Run Code Online (Sandbox Code Playgroud)
这给了我所有文件的指针:
但它没有显示此目录中的其他目录.
致电$iterator->get('CommonPrefixes')回报null.$iterator变量上的任何其他操作都会导致代码崩溃.
如何才能访问完整的响应ListBucketResult?
该getIterator()方法具有第三个参数,用于特定于迭代器对象的选项.在S3 ListObjects迭代器实际上是一个具体的类,并指定了一些自定义选项的文档:return_prefixes,sort_results,和names_only(见http://docs.aws.amazon.com/aws-sdk-php/latest/class-Aws.S3.Iterator .ListObjectsIterator.html).使用return_prefixes得到CommonPrefixes混合在一起的对象.试试这个:
$iterator = $client->getIterator(
'ListObjects',
array(
'Bucket' => $bucket,
'Prefix' => $dir,
'Delimiter' => '/'
),
array(
'return_prefixes' => true,
),
);
foreach ($iterator as $object) {
if (isset($object['Prefix'])) {
// For Common Prefixes
echo $object['Prefix'] . "<br/>\n";
} else {
// For Objects
echo $object['Key'] . "<br/>\n";
}
}
// Also Licensed under version 2.0 of the Apache License.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3559 次 |
| 最近记录: |