【问题标题】:Is there any way to get list of folder names in amazon s3 bucket?有什么方法可以获取 amazon s3 存储桶中的文件夹名称列表?
【发布时间】:2015-01-17 14:12:11
【问题描述】:

如果使用 s3cmd 在亚马逊 S3 存储桶中找不到,我正在编写用于上传文件夹的 PHP 脚本。为此,首先我需要获取所有文件夹名称并将其存储在数组中,然后使用 array_search 检查数组是否存在文件夹名称并继续下一步。

我在 PHP 中使用 get_object_list 和 list_objects 都不会只返回文件夹名称。所以我想知道有没有办法做到这一点。

【问题讨论】:

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


【解决方案1】:

Amazon S3 使用的是“扁平”存储系统。它实际上不支持文件夹/子目录。相反,子目录路径存储为文件名的一部分,称为“密钥”。

例如,foo.txt 存储在名为bar 的文件夹中,实际上创建了一个键名为bar/foo.txt 的对象。检索对象时,它看起来好像在 bar 目录中,但实际上不是。

S3 确实支持检索 Common Prefixes 列表的功能,该列表实际上是一个目录列表,但不能保证此类前缀始终存在,尤其是对于空目录。

与其编写脚本来“如果找不到则上传文件夹”,请查看AWS Command-Line Interface (CLI)。它包括一个命令aws s3 sync,可以在位置之间自动复制文件,包括只复制新的或修改过的文件。这可能完全避免您编写自己的脚本。

【讨论】:

    【解决方案2】:

    Amazon S3 是具有平面命名空间的云/对象存储。 Amazon S3 上没有文件夹或目录的概念。你所拥有的是key 和它的CommonPrefixes

    为了获得与 POSIX 相似的感觉,可以使用带有特殊分隔符的 ListObjects() 来模拟文件系统浏览。

    https://github.com/minio/mc 就是为了这样一个目的而构建的,您想要在mc 中很容易做到。

    下面是一个示例方法,说明您如何看待它的工作原理。 mc 具有进度条、会话管理、脚本友好的 --json 输出等等。

    $ mc --json ls https://s3.amazonaws.com/miniocloud | jq 'if .type == "folder" then .name else empty end'
    "G/"
    "Go/"
    "asdfasdfadsf/"
    "bin/"
    "ema/"
    "emacs/"
    "new/"
    "te1231231231231231231231/"
    "test/"
    

    【讨论】:

      猜你喜欢
      • 2016-02-06
      • 1970-01-01
      • 2018-12-04
      • 2016-02-01
      • 2021-08-09
      • 2020-04-01
      • 1970-01-01
      • 2011-03-21
      • 1970-01-01
      相关资源
      最近更新 更多