[英]Retrieve list of only root objects (folders) in S3 - aws sdk v3 php
给定我的S3存储桶,其中存储的图像具有如下结构:
root/portraits/portrait_001.jpg
root/landscapes/landscape_001.jpg
root是我的存储桶,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' => '/'));
目录实际上在Amazon S3中不存在。 但是,管理控制台允许创建文件夹,并且支持路径以使目录产生错觉。
例如,存储在foo
目录中的对象bar.jpg
的路径为/foo/bar.jpg
。 诀窍在于,该对象实际上称为foo/bar.jpg
而不仅仅是bar.jpg
。 大多数用户甚至都不会注意到差异。
从API中,通过CommonPrefixes
的概念提供了列出目录的功能, CommonPrefixes
外观与目录路径相同,并且由最后斜杠之前的对象名称(“键”)组成。
请参阅: 使用前缀和定界符分层列出密钥
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.