如何在保留目录结构的同时解压缩包含rails中文件夹和文件的zip文件

时间:2013-11-03 15:59:22

标签: ruby-on-rails ruby zip

我需要使用rails ziprails gem提取包含许多文件夹和文件的zip文件。同时也保持文件和文件夹的组织方式。

这并不像我那样直截了当。请参阅我在下面找到的解决方案(添加以供将来参考)

2 个答案:

答案 0 :(得分:20)

这对我有用。与解压缩包含子文件夹和文件的压缩文件夹时的结果相同。

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

答案 1 :(得分:3)

在Ruby中提取Zip档案

你需要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)