-1

我正在尝试使用 RubyZip 压缩目录中包含的所有文件。这是我所拥有的:

def bundle
      #create the ZIPfile with the title of (:id).zip
bundle_filename = "public/attachments/#{self.id}/#{self.id}.zip"

      #open the ZIPfile in order to add items in
Zip::ZipFile.open(bundle_filename, Zip::ZipFile::CREATE) {
  |zipfile|
    Dir.foreach("public/attachments/#{self.id}") do |item|
    t = File.open(item)
    zipfile.add(t, "public/attachments/#{self.id}")
    end
  }

    #change permissions on ZIPfile
  File.chmod(0644, bundle_filename)
  self.save
  end

这成功地执行了第一行并创建了具有正确名称的 zip 文件,但它没有添加该目录中包含的所有文件。有任何想法吗?

4

2 回答 2

4

让您的生活变得轻松并在 ruby​​ 方法中使用命令行功能:

在这个实现中,我压缩了一个 rails 目录,所以我在 Rails 函数的帮助下访问该目录的完整路径。您可以自己指定整个路径。

path = Rails.root.to_s + "/public/tmpFiles"
archive = path + "/tempFilesArchive.zip"
puts "Path: #{path}"
puts "Archive: #{archive}"
`rm "#{archive}"` # remove the archive file, if it exists.
`zip -rj "#{archive}" "#{path}"` # zip the contents of the directory

这应该在您压缩的同一目录中创建一个名为“tempFilesArchive.zip”的压缩文件。

于 2015-07-03T06:33:01.377 回答
1

我不知道这是否是最正确的方法,但这对我有用。这会将 dir 中的所有文件和文件夹压缩到 zip

  require 'zip/zip'

   def bundle
      bundle_filename = "abc.zip"
      FileUtils.rm "abc.zip",:force => true
      dir = "testruby"
      Zip::ZipFile.open(bundle_filename, Zip::ZipFile::CREATE) { |zipfile|
        Dir.foreach(dir) do |item|
          item_path = "#{dir}/#{item}"
          zipfile.add( item,item_path) if File.file?item_path
        end
      }
     File.chmod(0644,bundle_filename)
   end
于 2012-07-18T19:23:47.300 回答