Как распаковать zip файл, содержащий папки и файлы в рельсах, сохраняя структуру каталогов

Мне нужно извлечь zip файл, который содержит много папок и файлов с использованием rails ziprails gem. В то же время сохраняя файлы и папки, организованные так, как они были ziped.

Это было не так прямо, как я. Пожалуйста, см. Решение, которое я нашел ниже (добавлено для дальнейшего использования)

Ответ 1

Это сработало для меня. Получите тот же результат, что и при распаковке папки с папками с подпапками и файлами.

Zip::ZipFile.open(file_path) { |zip_file|
     zip_file.each { |f|
     f_path=File.join("destination_path", f.name)
     FileUtils.mkdir_p(File.dirname(f_path))
     zip_file.extract(f, f_path) unless File.exist?(f_path)
   }
  }

Решение с этого сайта: http://bytes.com/topic/ruby/answers/862663-unzipping-file-upload-ruby

Ответ 2

Извлечь ZIP-архивы в Ruby

Для этого вам нужен камень rubyzip. После его установки вы можете использовать этот метод для извлечения zip файлов:

require 'zip'

def extract_zip(file, destination)
  FileUtils.mkdir_p(destination)

  Zip::File.open(file) do |zip_file|
    zip_file.each do |f|
      fpath = File.join(destination, f.name)
      zip_file.extract(f, fpath) unless File.exist?(fpath)
    end
  end
end

Вы используете его следующим образом:

file_path   = "/path/to/my/file.zip"
destination = "/extract/destination/"

extract_zip(file_path, destination)