Как вывести список всех файлов в папке S3 с помощью тумана в Ruby

Как мне с помощью Fog перечислить все файлы в определенном «каталоге» S3?

Я знаю, что S3 не хранит файлы в папках, но мне нужен способ ограничить возвращаемые файлы определенной «папкой» вместо получения всего списка в корзине.


person Gerry Shaw    schedule 11.04.2013    source источник


Ответы (1)


Используйте параметр prefix в методе directory.get. Пример:

def get_files(path, options)
  connection = Fog::Storage.new(
    provider: 'AWS',
    aws_access_key_id: options[:key],
    aws_secret_access_key: options[:secret]
  )
  connection.directories.get(options[:bucket], prefix: path).files.map do |file|
    file.key
  end
end
person Gerry Shaw    schedule 11.04.2013
comment
Вероятно, стоит отметить, что prefix - это на самом деле суффикс, по крайней мере, структурно. Если путь к вашей вложенной корзине - 'foo / bar', тогда вызов вашего метода будет: .get('foo', prefix: 'bar'). - person pdoherty926; 17.07.2015
comment
Примечание pdoherty926 может немного сбить с толку, если вы не воспринимаете имя сегмента как часть пути. - person Amir; 25.04.2016
comment
Здесь есть крайний случай, когда вызов .map вернет не ВСЕ, а только одну страницу, возвращенную API AWS. Вызов .each для файлов позволит Fog управлять потреблением памяти, поскольку файлов может быть МНОГО. - person rposborne; 14.06.2016
comment
@rposborne хороший момент. Я думаю, что в случае очень большой папки использование .each и передача блока того, что вы хотели бы делать с файлом, было бы лучшим шаблоном для обработки этого сценария. - person Gerry Shaw; 15.06.2016
comment
Привет, я знаю, что это устарело, но кто-нибудь знает, как контролировать порядок сортировки? Я использую UUID для имен своих файлов и понимаю, что он возвращается в алфавитном порядке, а не загружается по времени :( - person chrisallick; 14.11.2016
comment
Обязательно опустите начальный / в пути prefix - это возвращает кажущийся пустой каталог. - person Ollie Bennett; 02.01.2019