【问题标题】:S3 Ruby SDK List Only Objects Directly under a prefix?S3 Ruby SDK仅列出直接在前缀下的对象?
【发布时间】:2019-12-11 07:30:22
【问题描述】:

我正在尝试在 S3 存储桶中的前缀下获取单级对象。存储桶中有大量对象,因此我想在特定前缀下遍历每个文件夹。到目前为止,这是我的代码:

require 'aws-sdk'

region = 'us-west-1'
bucket_name = 'my-example-bucket'
prefix = 'test1'
delimiter = '/'

s3_client = Aws::S3::Client.new(region: region)
resp = s3_client.list_objects_v2(bucket: bucket_name, prefix: prefix, delimiter: prefix + delimiter)
obj_list = []
resp.contents.each do |c|
  p c
  break
end

当我运行它时,我得到一个在我的前缀深处有 4 层的对象。

前缀下有 243 个文件夹。我只想要这些 243 而没有别的。

我该怎么做?

【问题讨论】:

    标签: ruby amazon-s3 aws-sdk


    【解决方案1】:

    首先你应该使用 prefix='test1/' 和 delimiter='/'。

    但是,您将一无所获。 S3 中的文件夹只是另一个前缀,因此您可以做的是遍历前缀。

    region = 'us-west-1'
    bucket_name = 'my-example-bucket'
    prefix = 'test1/'
    
    objs = s3_client.list_objects_v2(bucket: bucket_name, prefix: prefix, delimiter: '/')
    
    objs.common_prefixes.map(&:prefix).each do |prefix|
      current_objs = s3_client.list_objects_v2(bucket: bucket_name, prefix: prefix, delimiter: '/')
      p current_objs.contents # you will get nothing here again if all you have inside the folders is some other folders
    end
    

    【讨论】:

    • 没有按预期工作。这仍然会返回超过 1 级的对象的结果。
    猜你喜欢
    • 1970-01-01
    • 2015-10-04
    • 2021-05-06
    • 1970-01-01
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多