【发布时间】:2015-08-21 04:41:23
【问题描述】:
鉴于我的 S3 存储桶包含如下结构的图像:
root/portraits/portrait_001.jpg
root/landscapes/landscape_001.jpg
root 是我的存储桶,我的根目录中没有其他文件,只有那些文件夹(对象),我如何检索这些对象的列表?
portraits/
landscapes/
我熟悉在 ListObjects 调用中使用分隔符和前缀。
如果我执行以下操作,我不会得到任何结果:
$objects = $s3->getIterator('ListObjects', array(
'Bucket' => $bucket,
'Delimiter' => '/',
));
foreach($objects as $object)
echo $object['Key'] . "\n";
如果我不使用分隔符,显然我会得到一切。
我不能使用前缀,因为我想要的对象是根级别的。否则,我可以使用前缀来表示,只列出 'portraits/' 中的文件
从我的搜索中,我只设法找到了前几年只适用于 aws php sdk v1 或 v2 的解决方案,但我没有运气尝试这些(v3 完全不同)
有什么建议吗?我觉得我错过了一些简单的东西,但是通过文档搜索,我找不到任何可以帮助我的东西。作为最后的手段,我只需要坚持手动声明一个数组
$categories = ['portraits/', 'landscapes/']
但如果我想在将来添加更多类别并且不必担心手动添加另一个类别,这并不理想。
任何帮助将不胜感激:)
编辑 - 解决方案
在我的对象转储期间,我一定是找错了地方,但最终在 ListObjects 调用的返回结果中看到了带有“/”分隔符的通用前缀,如下所示:
$s3->listObjects(array('Bucket' => $bucket, 'Delimiter' => '/'));
【问题讨论】:
-
您是否尝试过使用从
ListBucket返回的CommonPrefixes列表? docs.aws.amazon.com/AmazonS3/latest/dev/… -
最初我在任何地方都找不到公共前缀,但也许我在将对象转储到错误的地方时忽略了这一点。我现在才找到它们。感谢您的帮助:)
-
具有以下表达式的分页器 '[CommonPrefixes[].Prefix, Contents[].Key][]' 也有助于stackoverflow.com/a/65245799/1172872
标签: php amazon-web-services amazon-s3