| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- package zip
- import (
- "archive/zip"
- "io"
- "os"
- )
- // Files compresses one or many files into a single zip archive file.
- // Credits: https://golangcode.com/create-zip-files-in-go/
- func Files(filename string, files []string) error {
- arc, err := os.Create(filename)
- if err != nil {
- return err
- }
- defer arc.Close()
- writer := zip.NewWriter(arc)
- defer writer.Close()
- for _, file := range files {
- in, err := os.Open(file)
- if err != nil {
- return err
- }
- defer in.Close()
- info, err := in.Stat()
- if err != nil {
- return err
- }
- header, err := zip.FileInfoHeader(info)
- if err != nil {
- return err
- }
- // Using FileInfoHeader() above only uses the basename of the file. If we want
- // to preserve the folder structure we can overwrite this with the full path.
- header.Name = file
- // Change to deflate to gain better compression
- // see http://golang.org/pkg/archive/zip/#pkg-constants
- header.Method = zip.Deflate
- w, err := writer.CreateHeader(header)
- if err != nil {
- return err
- }
- if _, err = io.Copy(w, in); err != nil {
- return err
- }
- }
- return nil
- }
|