Work with Zip archives.
Read a Zip from Bytes.
If you have an uploaded File of an archive, you can use File.toBytes to read it:
import File exposing (File)
import Task exposing (Task)
import Zip exposing (Zip)
type Msg
= GotZip (Maybe Zip)
readArchive : File -> Cmd Msg
readArchive file =
file
|> File.toBytes
|> Task.map Zip.fromBytes
|> Task.perform GotZipYou can also get Bytes from anywhere like an HTTP request,
or even from within another archive.
Once you have a Zip, you can use it to access its files and directories.
Use the Zip.Entry module to do read their content and metadata.
List all entries in the archive.
allEntries =
Zip.ls zipFiles and directories get their own entries and they are not stored in a tree format.
If you only care about one of them, you can use the Zip.Entry.isDirectory function to filter them:
allFiles =
List.filter (not << Entry.isDirectory) zipGet an entry by its absolute path.
Zip.byPath "versions/v1.txt"Nothing is returned if no entry matches the path exactly.
Directory entries are typically stored in the archive with a slash at the end:
Zip.byPath "versions" == Nothing
Zip.byPath "versions/" == Just Entry
Represents a Zip archive.
An archive is comprised of entries which represent (optionally) compressed files and directories.