HttpZip is a Ruby gem to extract individual files from a remote ZIP archive, without the need to download the entire file.
If your Zip file is hosted on a server that supports Content-Range requests and you only want to extract individual files, you don't need to download the entire archive to do that. HttpZip uses Content-Range requests to first read only the Central Directory of your archive and builds a list of entries from that. You can then download and extract individual entries without downloading the entire archive.
Add this line to your application's Gemfile:
gem'http_zip'And then execute:
$ bundle install
Or install it yourself as:
$ gem install http_zip
# Create a new HttpZip::File referencing your remote archive.# This only makes a HEAD request to check the server for# Range request support.zip=HttpZip::File.new("https://www.example.org/archive.zip")# Get a reference to a specific file.# This only requests the archive's Central Directory Entry.entry=zip.entries.find{ |e| e.name == 'compressed.txt'}# Read the extracted file contents into memory.# This downloads the entry's compressed contents and uncompresses# them locally.content=entry.read# You can also write the extracted entry directly to a local file.entry.write_to_file('/path/extracted.txt')If the server that the zip file is hosted on doesn't support Range requests, HttpZip will throw HttpZip::ContentRangeError.
Bug reports and pull requests are welcome on GitHub at https://github.com/peret/http_zip.
The gem is available as open source under the terms of the MIT License.