如何在 ruby​​ on rails 中使用 AWS-SDK gem 列出 s3 文件夹中的所有文件

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/19392931/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-02 22:52:32  来源:igfitidea点击:

How to list all files in an s3 folder using AWS-SDK gem in ruby on rails

ruby-on-railsrubyamazon-s3

提问by user648198

I wanted to show a list of all files in an s3 folder so I can get all the last modified dates so I can determine what files has been changed.

我想显示 s3 文件夹中所有文件的列表,以便我可以获得所有上次修改日期,以便确定哪些文件已更改。

I tried using objects.with_prefix('Folder1') it give me a full list but also contain Folder1.1 key

我尝试使用 objects.with_prefix('Folder1') 它给了我一个完整的列表,但也包含 Folder1.1 键

I don't know if i needed to use delimiter but I couldn't find anything how to use delimiter in aws sdk.

我不知道我是否需要使用分隔符,但我找不到任何如何在 aws sdk 中使用分隔符的信息。

Thanks so much in advance!

非常感谢!

I'm using 'aws-sdk' gem

我正在使用“aws-sdk” gem

Here is my bucket structure -Folder1 -File1 -File2 -Folder.1.1

这是我的存储桶结构 -Folder1 -File1 -File2 -Folder.1.1

Here is my code

这是我的代码

bucket = s3.buckets[bucket_name]
data = bucket.objects.with_prefix('Folder1/')
data.each do |object|
    puts "#{object.key}\t#{object.last_modified}";
end

回答by kebomix

Too late answer but better than never.

回答太晚了,但总比没有好。

You can do

你可以做

s3_bucket.objects.with_prefix('folder_name').collect(&:key)

According to official documentation here

根据官方文档here

回答by Mohit Jain

You can use this small piece of code for getting list of files for a specific folder.

您可以使用这一小段代码获取特定文件夹的文件列表。

 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)

回答by 0x539

https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/Client.html#list_objects_v2-instance_method

https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/Client.html#list_objects_v2-instance_method

SDK V3 has the prefix option for client!

SDK V3 有客户端前缀选项!

resp = client.list_objects_v2({ bucket: "BucketName", # required prefix: "FolderName", })

resp = client.list_objects_v2({ bucket: "BucketName", # required prefix: "FolderName", })

回答by Adilbiy Kanzitdinov

Currently I am also stuck with this problem. So far solution is to fetch all the objects and to filter them later:

目前我也被这个问题困住了。到目前为止的解决方案是获取所有对象并稍后过滤它们:

data = bucket.objects(bucketname, prefix: 'Folder1')

data_without_folders = data.select { |obj| !(obj.key =~ /\/$/) }

For delimiter, you just have to pass it in bucket.objects call like:

对于分隔符,您只需将其传递到 bucket.objects 调用中,例如:

data = bucket.objects(bucketname, prefix: 'prefix', delimiter: 'delimiter') 

If better solution is available, I will let you know.

如果有更好的解决方案,我会让你知道。