我正在尝试在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,别无其他。
我该怎么做?
答案 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