在S3中仅检索根对象(文件夹)的列表
鉴于我的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调用返回的结果中看到了Common Prefixes,如下所示:
$s3->listObjects(array('Bucket' => $bucket, 'Delimiter' => '/'));
目录实际上并不存在于Amazon S3中。 但是,管理控制台允许创建文件夹,并且支持路径以赋予目录错觉。
例如,存储在foo
目录中的object bar.jpg
的路径为/foo/bar.jpg
。 诀窍是该对象实际上被称为foo/bar.jpg
而不仅仅是bar.jpg
。 大多数用户甚至不会注意到其中的差异。
在API中,通过CommonPrefixes
的概念提供列出目录的能力, CommonPrefixes
与目录路径相同,由最后一个斜杠前的对象名称部分('键')组成。
请参阅:使用前缀和分隔符分层列出键
链接地址: http://www.djcxy.com/p/87597.html