web-dev-qa-db-fra.com

Comment répertorier tous les fichiers d'un dossier s3 à l'aide de la gem AWS-SDK dans Ruby on rails

Je voulais montrer une liste de tous les fichiers dans un dossier s3 afin de pouvoir obtenir toutes les dates de dernière modification afin de déterminer quels fichiers ont été modifiés.

J'ai essayé d'utiliser objects.with_prefix ('Folder1'), il me donne une liste complète mais contient également la clé Folder1.1

Je ne sais pas si je devais utiliser un délimiteur mais je ne trouvais rien comment utiliser un délimiteur dans aws sdk.

Merci beaucoup d'avance!

J'utilise la gemme 'aws-sdk'

Voici la structure de mon seau -Folder1 -Fichier1 -Fichier2 -Folder.1.1

Voici mon code 

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

Réponse trop tardive mais mieux que jamais.

Tu peux faire

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

Selon la documentation officielle ici

27
kebomix

Vous pouvez utiliser ce petit morceau de code pour obtenir la liste des fichiers d'un dossier spécifique.

 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)
10
Mohit Jain

Actuellement, je suis aussi coincé avec ce problème. Jusqu'ici, la solution consiste à récupérer tous les objets et à les filtrer plus tard:

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

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

Pour le délimiteur, il vous suffit de le passer dans bucket.objects call comme

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

Si une meilleure solution est disponible, je vous le ferai savoir. 

2

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

SDK V3 a l'option de préfixe pour le client!

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

1
ir0x539