62 lines
1.3 KiB
Go
62 lines
1.3 KiB
Go
package utils
|
|
|
|
import (
|
|
"archive/zip"
|
|
"compress/flate"
|
|
"io"
|
|
"io/fs"
|
|
"os"
|
|
"path"
|
|
"path/filepath"
|
|
"strings"
|
|
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
func UnpackZip(r io.ReaderAt, size int64, unpackFolder string) {
|
|
zr, _ := zip.NewReader(r, size)
|
|
for _, srcFile := range zr.File {
|
|
srcName := strings.ReplaceAll(srcFile.Name, "\\", "/")
|
|
outPath := path.Join(unpackFolder, srcName)
|
|
if srcFile.Mode().IsDir() {
|
|
os.Mkdir(outPath, 0o755)
|
|
} else {
|
|
os.MkdirAll(path.Dir(outPath), 0o755)
|
|
fr, _ := srcFile.Open()
|
|
f, _ := os.Create(path.Join(unpackFolder, srcName))
|
|
io.Copy(f, fr)
|
|
f.Close()
|
|
fr.Close()
|
|
}
|
|
}
|
|
}
|
|
|
|
func ZipFolder(filename, folder string) error {
|
|
f, err := os.Create(filename)
|
|
if err != nil {
|
|
logrus.Fatal(err)
|
|
}
|
|
zw := zip.NewWriter(f)
|
|
|
|
// Register a custom Deflate compressor.
|
|
zw.RegisterCompressor(zip.Deflate, func(out io.Writer) (io.WriteCloser, error) {
|
|
return flate.NewWriter(out, flate.NoCompression)
|
|
})
|
|
|
|
err = filepath.WalkDir(folder, func(path string, d fs.DirEntry, err error) error {
|
|
if !d.Type().IsDir() {
|
|
rel := path[len(folder)+1:]
|
|
zwf, _ := zw.Create(rel)
|
|
data, err := os.ReadFile(path)
|
|
if err != nil {
|
|
logrus.Error(err)
|
|
}
|
|
zwf.Write(data)
|
|
}
|
|
return nil
|
|
})
|
|
zw.Close()
|
|
f.Close()
|
|
return err
|
|
}
|