Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Set compression level when generating a ZIP file using RubyZip

I have a Ruby program that zips a directory tree of XML files using the rubyzip gem. My problem is that the file is starting to be heavy and I would like to increase the compression level, since compression time is not an issue.

I could not find in the rubyzip documentation a way to specify the compression level for the created ZIP file.

Anyone know how to change this setting? Is there another Ruby library that allows to specify compression level?

like image 952
Vincent Robert Avatar asked Mar 18 '10 16:03

Vincent Robert


1 Answers

Here is the code I created by looking at rubyzip internal.

level = Zlib::BEST_COMPRESSION
Zip::ZipOutputStream.open(zip_file) do |zip|
    Dir.glob("**/*") do |filename|
        entry = Zip::ZipEntry.new("", filename)
        entry.gather_fileinfo_from_srcpath(filename)
        zip.put_next_entry(entry, nil, nil, Zip::ZipEntry::DEFLATED, level)
        entry.get_input_stream { |is| IOExtras.copy_stream(zip, is) }
    end
end
like image 198
Vincent Robert Avatar answered Sep 29 '22 05:09

Vincent Robert