Module ZipWriter
Create zip archives.
Based on http://wiki.tcl.tk/15158
Usage:
local ZipWriter = require "ZipWriter" local function make_reader(fname) local f = assert(io.open(fname, 'rb')) local chunk_size = 1024 local desc = { -- `-rw-r-----` on Unix istext = true, isfile = true, isdir = false, mtime = 1348048902, -- lfs.attributes('modification') platform = 'unix', exattrib = { ZipWriter.NIX_FILE_ATTR.IFREG, ZipWriter.NIX_FILE_ATTR.IRUSR, ZipWriter.NIX_FILE_ATTR.IWUSR, ZipWriter.NIX_FILE_ATTR.IRGRP, ZipWriter.DOS_FILE_ATTR.ARCH, }, } return desc, desc.isfile and function() local chunk = f:read(chunk_size) if chunk then return chunk end f:close() end end ZipStream = ZipWriter.new() ZipStream:open_stream( assert(io.open('readme.zip', 'w+b')), true ) ZipStream:write('README.md', make_reader('README.md')) ZipStream:close()
-- Make encrypted archive local ZipWriter = require"ZipWriter" local AesEncrypt = require"ZipWriter.encrypt.aes" ZipStream = ZipWriter.new{ encrypt = AesEncrypt.new('password') } -- as before
Functions
new (options) | Create new `ZipWriter` object |
co_writer (fn) | Run coroutine and return writer function |
co_reader (fn) | Run coroutine and return reader function |
sink (stream, fname, desc) | Create new sink that write result to `ZipWriter` |
Tables
COMPRESSION_LEVEL | Supported compression levels. |
FILE_DESCRIPTION | Params that describe file or directory |
NIX_FILE_ATTR | Extra file attributes for Unix |
DOS_FILE_ATTR | Extra file attributes for Windows/DOS/FAT32 |
Class ZipWriter
ZipWriter:set_level (lvl) | Set compression level |
ZipWriter:open_stream (stream[, autoclose]) | Set stream as output |
ZipWriter:open_writer (writer[, seek]) | Set writer as output |
ZipWriter:write (fileName, fileDesc, reader, comment) | Add one file to archive. |
ZipWriter:close (comment) | Close archive. |
Functions
- new (options)
-
Create new `ZipWriter` object
Parameters:
- options table {utf8 = false, zip64 = false, level = DEFAULT}
See also:
- co_writer (fn)
-
Run coroutine and return writer function
Parameters:
- fn
See also:
Usage:
writer = co_writer(function(reader) ... end)
- co_reader (fn)
-
Run coroutine and return reader function
Parameters:
- fn
See also:
Usage:
reader = co_reader(function(writer) ... end)
local function put(reader) local chunk, err while true do chunk, err = reader() if not chunk then break end print(chunk) -- proceed data end end local function get(writer) local t = {1111,2222,3333,4444,5555} for k, v in ipairs(t) do writer(tostring(v)) -- send data end writer() -- EOS end get(ZipWriter.co_writer(put)) put(ZipWriter.co_reader(get))
- sink (stream, fname, desc)
-
Create new sink that write result to `ZipWriter`
Parameters:
- stream
- fname
- desc
Usage:
local ZipStream = ZipWriter.new() -- write to ftp --[=[ lua 5.1 needs coco ZipStream:open_writer(ZipWriter.co_writer(function(reader) FTP.put{ path = 'test.zip'; src = reader; } end)) --]=] -- write to file ZipStream:open_stream(assert(io.open('test.zip', 'wb+')) -- read from FTP FTP.get{ -- ftp params ... path = 'test.txt' sink = ZipWriter.sink(ZipStream, 'test.txt', {isfile=true;istext=1}) } ZipStream:close()
Tables
- COMPRESSION_LEVEL
-
Supported compression levels.
Fields:
- NO
- DEFAULT
- SPEED
- BEST
- FILE_DESCRIPTION
-
Params that describe file or directory
Fields:
- isfile boolean
- isdir boolean
- istext boolean
- mtime number last modification time. If nil then os.clock used.
- ctime number
- atime number
- exattrib number or table on Windows it can be result of GetFileAttributes. Also it can be array of flags.
- platform string
- data optional string file content
See also:
- NIX_FILE_ATTR
-
Extra file attributes for Unix
Fields:
- IFIFO named pipe (fifo)
- IFCHR character special
- IFDIR directory
- IFBLK block special
- IFREG regular
- IFLNK symbolic link
- IFSOCK socket
- ISUID set user id on execution
- ISGID set group id on execution
- ISTXT sticky bit
- IRWXU RWX mask for owner
- IRUSR R for owner
- IWUSR W for owner
- IXUSR X for owner
- IRWXG RWX mask for group
- IRGRP R for group
- IWGRP W for group
- IXGRP X for group
- IRWXO RWX mask for other
- IROTH R for other
- IWOTH W for other
- IXOTH X for other
- ISVTX save swapped text even after use
- DOS_FILE_ATTR
-
Extra file attributes for Windows/DOS/FAT32
Fields:
- NORMAL Normal file
- RDONLY Read-only file
- HIDDEN Hidden file
- SYSTEM System file
- VOLID Volume ID
- SUBDIR Subdirectory
- ARCH File changed since last archive
Class ZipWriter
- ZipWriter:set_level (lvl)
-
Set compression level
Parameters:
- lvl table {value=compression level, flag=compression flag, method=compression method }
See also:
- ZipWriter:open_stream (stream[, autoclose])
-
Set stream as output
Parameters:
- stream have to support write method. Also strean can support seek method.
- autoclose boolean if true then steam:close is called
- ZipWriter:open_writer (writer[, seek])
-
Set writer as output
Parameters:
- writer callable object. This function called when there is a new chunk of data.
- seek callable object.
- ZipWriter:write (fileName, fileDesc, reader, comment)
-
Add one file to archive.
Parameters:
- fileName string
- fileDesc FILE_DESCRIPTION
- reader optional callable must return nil on end of data
- comment optional string
See also:
- ZipWriter:close (comment)
-
Close archive.
Parameters:
- comment optional string