Project

ngzip

0.01
Low commit activity in last 3 years
No release in over a year
Provides a nginx mod_zip compatible file manifest for streaming support. See http://wiki.nginx.org/NginxNgxZip for the nginx module.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

>= 0
>= 2.2.10
 Project Readme

Ngzip

This gem allows easy integration of nginx mod_zip into your ruby/rails application by providing the formatted output list and a HTTP header to use the on-thy-fly creation of ZIP archives.

Installation

Add this line to your application's Gemfile:

gem 'ngzip'

And then execute:

$ bundle

Or install it yourself as:

$ gem install ngzip

Usage

In a controller

b = Ngzip::Builder.new()
response.headers['X-Archive-Files'] = 'zip'
render :text => b.build(["/data/test/Report.pdf", "/data/test/LargeArchive.tar"])

This will generate a manifest similar to this

8f92322f 446 /data/test/Report.pdf Report.pdf
13788d9a 234 /data/test/LargeArchive.tar LargeArchive.tar

Directories in the archive

The builder will automatically remove common directory prefix for the pathes inside the archive. If you want to keep relative directories inside, specify the :base_dir option when calling the builder:

options = {:base_dir => '/data'}
render :text => b.build(["/data/test/Report.pdf", "/data/test/LargeArchive.tar"], options)

This will generate

8f92322f 446 /data/test/Report.pdf test/Report.pdf
13788d9a 234 /data/test/LargeArchive.tar test/LargeArchive.tar

nginx configuration

Compile nginx with the mod_zip module from https://github.com/evanmiller/mod_zip.

Configure nginx to serve files with absolute paths from an internal location

# mod_zip location helper
# Note: The leading ^~ is essential here, no more checks should be done after this match
location ^~ /data/ {
	root /;
	internal;
}

Note that we only operate with local files in this examples. The module mod_zip uses subrequests to fetch the actual file data and would support any location type (even proxied).

License

Copyright (c) 2013, ncode gmbh. All Rights Reserved. Copyright (c) 2017, CargoServer AG. All Rights Reserved. Copyright (c) 2021, Swiss Cyber Gate AG. All Rights Reserved.

This project is licenced under the MIT License.