簡體   English   中英

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

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

我想顯示 s3 文件夾中所有文件的列表,以便我可以獲得所有上次修改日期,以便確定哪些文件已更改。

我嘗試使用 objects.with_prefix('Folder1') 它給了我一個完整的列表,但也包含 Folder1.1 鍵

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

非常感謝!

我正在使用“aws-sdk” gem

這是我的存儲桶結構 -Folder1 -File1 -File2 -Folder.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)

根據官方文檔here

更新: SDK V3

s3 = Aws::S3::Client.new
resp = client.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 =~ /\/$/) }

對於分隔符,您只需將其傳遞到 bucket.objects 調用中,例如:

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

如果有更好的解決方案,我會讓你知道。

讓我們記住,S3 不是文件系統,所以即使是“文件夾/”也是一個對象。

現在,如果要獲取特定路徑的文件,可以使用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)

輸出將只是沒有文件夾/的所有圖片鍵:

  • 圖片/馬.jpg
  • 圖片/狗.jpg
  • 圖片/貓.jpg

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM