Skip to content

Library to read zip file in a stream. Zip file binary stream -> stream of {:new_file,name} or uncompressed_bin Erlang zlib library only allows deflate decompress stream. But Erlang zip library does not allow content streaming.

Notifications You must be signed in to change notification settings

kbrw/zip_stream

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ZipStream Build Status

Library to read zip file in a stream. Zip file binary stream -> stream of {:new_file,name} or uncompressed_bin

Erlang zlib library only allows deflate decompress stream. But Erlang zip library does not allow content streaming.

Usage

For instance if you have a zip with multiple files, you can use the stream to do:

File.stream!("myfile.zip", [], 500)
|> ZipStream.unzip
|> Stream.reduce(nil,fn 
  {:new_file,name},_current->name
  binary,file_name->
    #DO SOMTHING WITH the binary chunk of file_name
    file_name
end)

An other example: your zip contains only one file, in this case you can simply do the following to get a standard binary stream of this on file. (drop the {:new_file,_} of the single file)

binstream = File.stream!("myfile.zip", [], 500)
|> ZipStream.unzip
|> Stream.drop(1)

Known Limitations

This library does not handle all possible zip files, in particular:

  • The zip archive contains uncompressed data or data not compressed with the deflate algorithm
  • The zip archive contains data with the data_descriptor format
  • The zip archive is a zip64 to handle files bigger than (2^32 4Go)

Installation

The package can be installed as:

  1. Add zip_stream to your list of dependencies in mix.exs:

    def deps do [{:zip_stream, "~> 0.1.0"}] end

  2. Ensure zip_stream is started before your application:

    def application do [applications: [:zip_stream]] end

About

Library to read zip file in a stream. Zip file binary stream -> stream of {:new_file,name} or uncompressed_bin Erlang zlib library only allows deflate decompress stream. But Erlang zip library does not allow content streaming.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •