fix
liuxiaolong
2019-12-20 3eb103423f85fb2af1f5ff91432e30417551e313
fix
2个文件已修改
93 ■■■■■ 已修改文件
extend/util/util.go 63 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/SysService.go 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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压缩成tar.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
}
//解压 tar.gz
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("获取升级压缩包md5失败")
        }
        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("升级程序解压失败,请确定上传的补丁是zip格式")
            if !updatePatch(identifier, ext) {
                return false,errors.New("执行升级过程异常,请确定上传的补丁是tar.gz格式")
            }
            return true,nil
        } else {
            logger.Debug("strMd5 is", strMd5,"identifier is",identifier,"not equal")
            return false,errors.New("校验升级文件失败")