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 ++++++++++++++++++++++++++----- service/SysService.go | 30 ++++++--------- 2 files changed, 64 insertions(+), 29 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 diff --git a/service/SysService.go b/service/SysService.go index 055fb0f..6108ca1 100644 --- a/service/SysService.go +++ b/service/SysService.go @@ -9,6 +9,7 @@ "mime/multipart" "os" "os/exec" + "path" "strings" "webserver/extend/config" "webserver/extend/util" @@ -95,11 +96,9 @@ if !util.CreateDirectory(configPatchPath) { return false } - index := strings.LastIndex(arg.Header.Filename, ".") - if index < 0 { - return false - } - subfix := arg.Header.Filename[index:] + + filenameWithSuffix := path.Base(arg.Header.Filename) + subfix := path.Ext(filenameWithSuffix) MD5Str := arg.Identifier logger.Debug("Identifier:",MD5Str) fileTmpPath := configPatchPath + "/"+MD5Str @@ -164,11 +163,10 @@ } else { configPatchPath = "/opt/vasystem/patch" } - index := strings.LastIndex(filename, ".") - if index < 0 { - return false,errors.New("闈炴硶鐨勫崌绾у帇缂╁寘鏂囦欢") - } - ext := filename[index:] + + filenameWithSuffix := path.Base(filename) + ext := path.Ext(filenameWithSuffix) + zipFilePath := configPatchPath + "/"+identifier+ext if util.Exists(zipFilePath) { //鏍¢獙md5 @@ -177,15 +175,11 @@ return false,errors.New("鑾峰彇鍗囩骇鍘嬬缉鍖卪d5澶辫触") } if strMd5 == identifier { - if util.TarGzCheck(zipFilePath) { - if !updatePatch(identifier, ext) { - return false,errors.New("鎵ц鍗囩骇杩囩▼寮傚父") - } - return true,nil - } else { - logger.Debug("not a valid zip file,path:",zipFilePath) - return false,errors.New("鍗囩骇绋嬪簭瑙e帇澶辫触锛岃纭畾涓婁紶鐨勮ˉ涓佹槸zip鏍煎紡") + if !updatePatch(identifier, ext) { + return false,errors.New("鎵ц鍗囩骇杩囩▼寮傚父,璇风‘瀹氫笂浼犵殑琛ヤ竵鏄痶ar.gz鏍煎紡") } + return true,nil + } else { logger.Debug("strMd5 is", strMd5,"identifier is",identifier,"not equal") return false,errors.New("鏍¢獙鍗囩骇鏂囦欢澶辫触") -- Gitblit v1.8.0