繁体   English   中英

检索S3中仅根对象(文件夹)的列表-AWS SDK V3 PHP

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM