S3 Ruby SDK仅列出直接在前缀下的对象?

时间:2019-08-02 16:29:53

标签: ruby amazon-s3 aws-sdk

我正在尝试在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,别无其他。

我该怎么做?

1 个答案:

答案 0 :(得分: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