【问题标题】:Amazon S3 how to list files in a “folder”Amazon S3 如何列出“文件夹”中的文件
【发布时间】:2019-05-26 11:45:08
【问题描述】:

我将 Amazon S3 中文件的键设置为文件夹\文件名。有没有办法获取“文件夹”下的所有文件(通过正则表达式搜索文件)?

【问题讨论】:

    标签: amazon-web-services amazon-s3 file-upload aws-sdk


    【解决方案1】:

    您使用aws-sdk 标记了您的问题,但没有提及语言,因此我将在此答案中使用 Python。

    list_objects_v2() 命令接受Prefix

    response = client.list_objects_v2(
        Bucket='string',
        Delimiter='string',
        EncodingType='url',
        MaxKeys=123,
        Prefix='string',
        ContinuationToken='string',
        FetchOwner=True|False,
        StartAfter='string',
        RequestPayer='requester'
    )
    

    如果您设置Prefix='folder/',那么它将返回该文件夹中的对象。

    但是,不可能使用正则表达式。您的计划将需要过滤退货列表以满足您的需求。

    【讨论】:

    • 谢谢。但这并不能解决我的问题,因为它仍然显示 子文件夹 的文件。无论如何调整你的反应来做到这一点?
    • @GunithD 请创建一个新问题,而不是通过对旧问题的评论提出问题。
    【解决方案2】:

    希望提供的链接能回答您的问题。

    AWS S3 object listing

    您还可以使用 aws-cli 获取对象列表

    在终端输入以下命令

    aws s3 ls bucketName/folderName/

    这里需要在文件夹名称的末尾加上“/”,否则结果中只会得到文件夹名称。

    【讨论】:

      【解决方案3】:

      如果您想获取在 S3 存储桶中的文件夹中存在的 SUBFOLDER 中的文件列表,我们可以使用 list_objects API 来实现。假设您需要桶 testabc 子文件夹中的所有文件具有以下文件:

      folderA/abc/fileabcX
      folderA/def/filedefX
      folderB/abc/fileabcY
      folderB/def/filedefY
      folderC/abc/fileabcZ
      folderC/def/filedefZ
      folderC/xyz/filexyzZ
      

      在 Python 中,我们可以通过调用 list_objects_v2 API 两次来做到这一点,您可以在其中 第一次获取文件夹,使用空前缀和 / 分隔符并在输出。然后,再次调用 list_objects_v2,将您的子文件夹作为前缀的一部分,使用您在第一次调用中获得的文件夹名称:

      import boto3
      client = boto3.client('s3')
      objs = client.list_objects_v2(Bucket="test", Prefix='', Delimiter='/')
      for prefix in objs.get('CommonPrefixes')
          folder = prefix.get('Prefix')
          resp = client.list_objects_v2(
              Bucket="test",
              Prefix=folder + 'abc/',
          )
          if resp.get('Contents') is not None:
              for obj in resp.get('Contents'):
                  print(obj.get('Key'))
      

      输出:

      fileabcX
      fileabcY
      fileabcZ
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-06
        • 1970-01-01
        • 1970-01-01
        • 2013-09-12
        • 1970-01-01
        • 1970-01-01
        • 2010-12-28
        • 2012-07-10
        相关资源
        最近更新 更多