S3 Ruby SDK是否仅列出前缀下的对象?

S3 Ruby SDK是否仅列出前缀下的对象?,ruby,amazon-s3,aws-sdk,Ruby,Amazon S3,Aws Sdk,我试图在S3存储桶中的前缀下获取单个级别的对象。bucket中有大量的对象,因此我想在特定前缀下遍历每个文件夹。以下是我目前的代码: 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_objec

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

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,别的什么都不要


如何执行此操作?

首先,您应该使用前缀='test1/'和分隔符='/'

然而,你将得不到任何内容。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级的对象的结果。