![](/img/trans.png)
[英]How to copy file across buckets using aws-s3 or aws-sdk gem in ruby on rails
[英]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)
輸出將只是沒有文件夾/的所有圖片鍵:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.