zstream v0.5.0 Zstream View Source

Module for reading and writing ZIP file stream

Example

Zstream.zip([
  Zstream.entry("report.csv", Stream.map(records, &CSV.dump/1)),
  Zstream.entry("catfilm.mp4", File.stream!("/catfilm.mp4", [], 512), coder: Zstream.Coder.Stored)
])
|> Stream.into(File.stream!("/archive.zip"))
|> Stream.run
File.stream!("archive.zip", [], 512)
|> Zstream.unzip()
|> Enum.reduce(%{}, fn
  {:entry, %Zstream.Entry{name: file_name} = entry}, state -> state
  {:data, data}, state -> state
  {:data, :eof}, state -> state
end)

Link to this section Summary

Functions

Creates a ZIP file entry with the given name

Unzips file stream

Creates a ZIP file stream

Link to this section Types

Link to this section Functions

Link to this function

entry(name, enum, options \\ [])

View Source
entry(String.t(), Enumerable.t(), Keyword.t()) :: entry()

Creates a ZIP file entry with the given name

The enum could be either lazy Stream or List. The elements in enum should be of type iodata

Options

Unzips file stream

returns a new stream which emits the following tuples for each zip entry

{:entry, Zstream.Entry.t/0} - Indicates a new file entry.

{:data, iodata/0 | :eof} - one or more data tuples will be emitted for each entry. :eof indicates end of data tuples for current entry.

NOTES

Unzip doesn't support all valid zip files. Zip file format allows the writer to write the file size info after the file data, which allows the writer to zip streams with unknown size. But this prevents the reader from unzipping the file in a streaming fashion, because to find the file size one has to go to the end of the stream. Ironcially, if you use Zstream to zip a file, the same file can't be unzipped using Zstream.

  • doesn't support file which uses data descriptor header
  • doesn't support encrypted file
Link to this function

zip(entries, options \\ [])

View Source
zip([entry()], Keyword.t()) :: Enumerable.t()

Creates a ZIP file stream

entries are consumed one by one in the given order

Options

  • :zip64 (boolean) - If set to true zip64 format is used. Zip64 can support files more than 4 GB in size, but not all the unzip programs support this format. Defaults to false