【问题标题】:How to get only one level of objects in s3 bucket in php?如何在 php 的 s3 存储桶中只获取一级对象?
【发布时间】:2022-01-18 08:36:27
【问题描述】:

如何从 S3 存储桶中仅查找顶级对象?

如果桶的键是:

public/uploads/test_company/test1
public/uploads/test_company/test2
public/uploads/test_company/test1/test.txt

如果想在以下位置查找对象:

public/uploads/test_company

那么只有

public/uploads/test_company/test1
public/uploads/test_company/test2

应该来,不是任何子文件夹和文件。那么如何在 PHP 中实现呢?

【问题讨论】:

    标签: php amazon-web-services amazon-s3


    【解决方案1】:

    您可以指定:

    • Prefix - 'public/uploads/test_company/'
    • Delimiter = '/'

    前缀会将结果限制为该路径中的对象。

    分隔符告诉 S3 将斜杠视为目录,因此只会返回该目录的对象。它还将提供CommonPrefixes 的列表,它们是子目录的名称。

    来自AWS SDK for PHP 3.x: listobjects

    $result = $client->listObjects([
        'Bucket' => '<string>', // REQUIRED
        'Delimiter' => '<string>',
        'EncodingType' => 'url',
        'ExpectedBucketOwner' => '<string>',
        'Marker' => '<string>',
        'MaxKeys' => <integer>,
        'Prefix' => '<string>',
        'RequestPayer' => 'requester',
    ]);
    

    【讨论】:

    • PHP 3.x... 从 2006 年开始!?
    • 对不起,我不是 PHP 人,所以我只是做了一般的网络搜索。随意替换为当前的 PHP 版本。
    • 我使用的是php 7.4版
    • 上述解决方案无效。
    • 看来v3标签是SDK的版本,不是PHP的版本。当您说“上述解决方案不起作用”时,您能否提供更多详细信息?列表中返回了什么?您也可以通过 AWS CLI 进行尝试,例如:aws s3api list-objects --bucket mybucket --prefix public/uploads/test_company/ --delimiter '/'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 2020-11-24
    • 2017-03-20
    • 2013-04-07
    • 2020-12-01
    • 1970-01-01
    相关资源
    最近更新 更多