微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 PHP SDK 仅列出来自 AWS S3 的目录

如何解决使用 PHP SDK 仅列出来自 AWS S3 的目录

我的 AWS S3 存储桶中有以下结构。

S3Bucket view

通过这段代码,我得到了 rootfolder/ 下所有对象的列表 我的问题是:如何列出第一层的所有对象红色。

S3Bucket view

使用下面的代码,我得到如下输出rootfolder/hi.pdf rootfolder/creds.txt rootfolder/photo.png rootfolder/folder2/ rootfolder/folder2/creds2.txt rootfolder/folder2/account.pdf

function userlistObjectsSourceFolder() {
    global $s3Client;
    $bucket='myBucketS3';
    
    $objects = $s3Client->getIterator('ListObjects',array(
        "Bucket" => $bucket,'Marker' => "rootfolder/","Prefix" => "rootfolder/"


        
    )); 
    foreach ($objects as $object) {

        echo $object['Key'] . "\n";
        
    }
}


所需的输出

rootfolder/hi.pdf rootfolder/creds.txt rootfolder/photo.png rootfolder/folder2/


编辑 2: 我将 ListObjectsV2 实现为

function userlistObjectsSourceFolder($sourceFolder2) {
    global $s3Client;
    $bucket='s3schema-template';
    
    $objects = $s3Client->getIterator('ListObjectsV2',array(
        "Bucket" => $bucket
        "Prefix" => "rootfolder/","Delimiter" =>  "/"
        
        

        
    )); 
    foreach ($objects as $object) {

        echo $object['Key'] . "\n";
        

        
    }


使用这个配置我得到输出rootfolder/ rootfolder/hi.pdf rootfolder/creds.txt rootfolder/photo.png 但是我无法返回 CommonPrefixes在这种情况下它是 folder2/

解决方法

如果您只想获取顶层文件夹的内容,您可以使用 ListObjectsV2 方法,并将 Delimiter 属性添加到您的请求中,其值为 /。您应该得到一组位于前缀根部的 Contents,以及一组将返回“子文件夹”的 CommonPrefixes(我将其放在引号中,因为它们不是不是真正的文件夹)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。