如何使用RubyZIP将现有文件添加到ZIP文件?

时间:2016-08-02 18:16:50

标签: ruby-on-rails ruby rubyzip

在我的Rails 4.2应用程序中,我使用RubyZIP创建类似于以下内容的控制器操作:

class SomeController < ApplicationController

  def some_action
    file_stream = Zip::ZipOutputStream.write_buffer do |zip|
      zip.put_next_entry "dir1/hello.txt"
      zip.print "Hello"
      zip.put_next_entry "dir2/hello.txt"
      zip.print "World"
    end
    file_stream.rewind
    respond_to do |format|
      format.zip do
        send_data file_stream.read, filename: "zip_file.zip"
      end
    end
  end

end

在示例中,动态创建和写入两个文件,然后保存到ZIP文件中。

但是如何将已存在的文件(!)添加到ZIP文件中,例如我的/app/assets/documents文件夹中的PDF文件?

这应该更容易实现,但我找不到任何文档。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

zip_file = File.new(zip_file_path, 'w')

Zip::File.open(zip_file.path, Zip::File::Create) do |zip|
  zip.add(file_name, file_path)
end

zip_file

这里,file_name和file_path是要添加到zip文件的文件的名称和路径,zip_file_path是ZipFile的路径。希望有所帮助!