From f26a0cab5bca17b7eab57f6330e576271e17a17f Mon Sep 17 00:00:00 2001 From: liuxiaolong <736321739@qq.com> Date: 星期三, 13 十一月 2019 19:12:08 +0800 Subject: [PATCH] update ynSwagger,sync to master --- util/zip.go | 117 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 117 insertions(+), 0 deletions(-) diff --git a/util/zip.go b/util/zip.go index c7d8682..166173d 100644 --- a/util/zip.go +++ b/util/zip.go @@ -1 +1,118 @@ package util + +import ( + "archive/zip" + "io" + "os" + "strings" +) + +//鍘嬬缉鏂囦欢 +//files 鏂囦欢鏁扮粍锛屽彲浠ユ槸涓嶅悓dir涓嬬殑鏂囦欢鎴栬�呮枃浠跺す +//dest 鍘嬬缉鏂囦欢瀛樻斁鍦板潃 +func Compress2Zip(files []*os.File, dest string) error { + d, _ := os.Create(dest) + defer d.Close() + w := zip.NewWriter(d) + defer w.Close() + for _, file := range files { + err := compress(file, "", w) + if err != nil { + return err + } + } + return nil +} + +func compress(file *os.File, prefix string, zw *zip.Writer) error { + info, err := file.Stat() + if err != nil { + return err + } + if info.IsDir() { + prefix = prefix + "/" + info.Name() + fileInfos, err := file.Readdir(-1) + if err != nil { + return err + } + for _, fi := range fileInfos { + f, err := os.Open(file.Name() + "/" + fi.Name()) + if err != nil { + return err + } + err = compress(f, prefix, zw) + if err != nil { + return err + } + } + } else { + header, err := zip.FileInfoHeader(info) + header.Name = prefix + "/" + header.Name + if err != nil { + return err + } + writer, err := zw.CreateHeader(header) + if err != nil { + return err + } + _, err = io.Copy(writer, file) + file.Close() + if err != nil { + return err + } + } + return nil +} + +//瑙e帇 +func DeCompress(zipFile, dest string) error { + reader, err := zip.OpenReader(zipFile) + if err != nil { + return err + } + defer reader.Close() + for _, file := range reader.File { + rc, err := file.Open() + if err != nil { + return err + } + defer rc.Close() + filename := dest + file.Name + err = os.MkdirAll(getDir(filename), 0755) + if err != nil { + return err + } + w, err := os.Create(filename) + if err != nil { + return err + } + defer w.Close() + _, err = io.Copy(w, rc) + if err != nil { + return err + } + w.Close() + rc.Close() + } + return nil +} + +func getDir(path string) string { + return subString(path, 0, strings.LastIndex(path, "/")) +} + +func subString(str string, start, end int) string { + rs := []rune(str) + length := len(rs) + + if start < 0 || start > length { + panic("start is wrong") + } + + if end < start || end > length { + panic("end is wrong") + } + + return string(rs[start:end]) +} + -- Gitblit v1.8.0