From a3d94612d4a0e946d59b5d3b7f944748b9fe9240 Mon Sep 17 00:00:00 2001 From: charlie <3140647@qq.com> Date: Sun, 27 Mar 2022 10:21:39 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8E=8B=E7=BC=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- compress/zip.go | 62 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 compress/zip.go diff --git a/compress/zip.go b/compress/zip.go new file mode 100644 index 0000000..4aaa315 --- /dev/null +++ b/compress/zip.go @@ -0,0 +1,62 @@ +package compress + +import ( + "archive/zip" + "io/ioutil" + "os" +) + +type zipPackage struct { + files []zipFile +} + +type zipFile struct { + name string + filename string +} + +func NewZip() *zipPackage { + return &zipPackage{} +} + +func (z *zipPackage) AddFile(name string, f string) error { + if _, err := os.Stat(f); err != nil { + return err + } + + z.files = append(z.files, zipFile{name: name, filename: f}) + return nil +} + +func (z *zipPackage) WriteToFile(filename string) error { + out, err := os.Create(filename) + if err != nil { + return err + } + defer out.Close() + + return z.Write(out) +} + +func (z *zipPackage) Write(out *os.File) error { + zipWriter := zip.NewWriter(out) + defer zipWriter.Close() + + for _, f := range z.files { + fileWriter, err := zipWriter.Create(f.name) + if err != nil { + return err + } + + in, err := ioutil.ReadFile(f.filename) + if err != nil { + return err + } + + if _, err = fileWriter.Write(in); err != nil { + return err + } + } + + return nil +}