From 3eb103423f85fb2af1f5ff91432e30417551e313 Mon Sep 17 00:00:00 2001 From: liuxiaolong <736321739@qq.com> Date: 星期五, 20 十二月 2019 18:52:32 +0800 Subject: [PATCH] fix --- extend/util/util.go | 63 ++++++++++++++++++++++++++----- 1 files changed, 52 insertions(+), 11 deletions(-) diff --git a/extend/util/util.go b/extend/util/util.go index 9ff0e64..3e74a89 100644 --- a/extend/util/util.go +++ b/extend/util/util.go @@ -3,7 +3,6 @@ import ( "archive/tar" "archive/zip" - "basic.com/valib/logger.git" "bytes" "compress/gzip" "crypto/md5" @@ -303,19 +302,61 @@ return nil } -func TarGzCheck(filePath string) bool { - f, err := os.Open(filePath) +//鍘嬬缉 浣跨敤gzip鍘嬬缉鎴恡ar.gz +func TarCompress(files []*os.File, dest string) error { + d, _ := os.Create(dest) + defer d.Close() + gw := gzip.NewWriter(d) + defer gw.Close() + tw := tar.NewWriter(gw) + defer tw.Close() + for _, file := range files { + err := gzipCompress(file, "", tw) + if err != nil { + return err + } + } + return nil +} + +func gzipCompress(file *os.File, prefix string, tw *tar.Writer) error { + info, err := file.Stat() if err != nil { - return false + return err } - defer f.Close() - buf := make([]byte, 4) - if n, err := f.Read(buf); err != nil || n < 4 { - return false + 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 = gzipCompress(f, prefix, tw) + if err != nil { + return err + } + } + } else { + header, err := tar.FileInfoHeader(info, "") + header.Name = prefix + "/" + header.Name + if err != nil { + return err + } + err = tw.WriteHeader(header) + if err != nil { + return err + } + _, err = io.Copy(tw, file) + file.Close() + if err != nil { + return err + } } - fType := hex.EncodeToString(buf) - logger.Debug("file type :",fType) - return fType == "8b1f" + return nil } //瑙e帇 tar.gz -- Gitblit v1.8.0