我想显示 s3 文件夹中所有文件的列表,以便我可以获得所有最后修改日期,以便确定哪些文件已更改。
我尝试使用objects.with_prefix('Folder1'),它给了我一个完整的列表,但也包含Folder1.1键
我不知道是否需要使用分隔符,但我找不到任何如何在 aws sdk 中使用分隔符的信息。
提前非常感谢!
我正在使用“aws-sdk”gem
这是我的桶结构 -文件夹1 -文件1 -文件2 -文件夹.1.1
这是我的代码
bucket = s3.buckets[bucket_name]
data = bucket.objects.with_prefix('Folder1/')
data.each do |object|
puts "#{object.key}\t#{object.last_modified}";
end
回答太晚了,但总比不回答好。
你可以做
s3_bucket.objects.with_prefix('folder_name').collect(&:key)
根据官方文档这里
更新: SDK V3
s3 = Aws::S3::Client.new
resp = s3.list_objects_v2({
bucket: "BucketName", # required
prefix: "FolderName",
})
您可以使用这一小段代码来获取特定文件夹的文件列表。
s3 = Aws::S3::Resource.new(region: 'ap-southeast-1', access_key_id: ENV['AWS_ACCESS_KEY_ID'], secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'] )
data_files = s3.bucket(bucket_name).objects(prefix: 'prefix/', delimiter: 'delimiter').collect(&:key)
https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/Client.html#list_objects_v2-instance_method
SDK V3有客户端前缀选项!
resp = client.list_objects_v2({
bucket: "BucketName", # required
prefix: "FolderName",
})
目前我也被这个问题困扰。到目前为止,解决方案是获取所有对象并稍后过滤它们:
data = bucket.objects(bucketname, prefix: 'Folder1')
data_without_folders = data.select { |obj| !(obj.key =~ /\/$/) }
对于分隔符,您只需将其传递到存储桶中即可。对象调用如下:
data = bucket.objects(bucketname, prefix: 'prefix', delimiter: 'delimiter')
如果有更好的解决方案,我会告诉你。
让我们记住,S3 不是文件系统,所以即使是“folder/”也是一个对象。
现在如果你想获取特定路径的文件,你可以使用start_after。例如,如果您的 S3 存储桶中有一个像这样的对象列表。
pictures/
pictures/horse.jpg
pictures/dog.jpg
pictures/cat.jpg
lion.jpg
您可以通过执行以下操作来获取图片/路径中的所有图片:
s3 = Aws::S3::Resource.new(region: 'ap-southeast-1', access_key_id: ENV['AWS_ACCESS_KEY_ID'], secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'] )
pictures = s3.bucket(bucket_name).objects(prefix: 'pictures/', delimiter: '', start_after: 'pictures/').collect(&:key)
输出将仅是所有图片键,没有文件夹/: