fix
liuxiaolong
2019-12-20 3eb103423f85fb2af1f5ff91432e30417551e313
extend/util/util.go
@@ -1,12 +1,21 @@
package util
import (
   "archive/tar"
   "archive/zip"
   "bytes"
   "compress/gzip"
   "crypto/md5"
   "encoding/hex"
   "encoding/json"
   "image"
   "io"
   "io/ioutil"
   "net/http"
   "os"
   "path/filepath"
   "strconv"
   "time"
   "webserver/extend/code"
   "basic.com/pubsub/protomsg.git"
@@ -173,6 +182,14 @@
   return float32(f)
}
func ParseScore64(compareScore float64) float64 {
   if compareScore < 1 {
      compareScore = compareScore * 100
   }
   f, _ := strconv.ParseFloat(fmt.Sprintf("%2.2f", compareScore), 64)
   return f
}
// UnCompress uncompress
func UnCompress(in []byte) ([]byte, error) {
   out := make([]byte, 10*len(in))
@@ -200,3 +217,213 @@
   out = out[:n] // compressed data
   return out, nil
}
// 判断所给路径文件/文件夹是否存在
func Exists(path string) bool {
   if path == "" {
      return false
   }
   _, err := os.Stat(path)    //os.Stat获取文件信息
   if err != nil {
      if os.IsExist(err) {
         return true
      }
      return false
   }
   return true
}
func CreateDirectory(path string) bool {
   if path == "" {
      return false
   }
   if Exists(path) {
      return true
   }
   err := os.MkdirAll(path,os.ModePerm)
   if err !=nil {
      return false
   }
   return true
}
//日期转字符串
func FormatDate(date time.Time, layout string) string {
   layout = strings.Replace(layout, "yyyy", "2006", 1)
   layout = strings.Replace(layout, "yy", "06", 1)
   layout = strings.Replace(layout, "MM", "01", 1)
   layout = strings.Replace(layout, "dd", "02", 1)
   layout = strings.Replace(layout, "HH", "15", 1)
   layout = strings.Replace(layout, "mm", "04", 1)
   layout = strings.Replace(layout, "ss", "05", 1)
   layout = strings.Replace(layout, "SSS", "000", -1)
   return date.Format(layout)
}
func ZipCheck(zipPath string) bool {
   f, err := os.Open(zipPath)
   if err != nil {
      return false
   }
   defer f.Close()
   buf := make([]byte, 4)
   if n, err := f.Read(buf); err != nil || n < 4 {
      return false
   }
   return bytes.Equal(buf, []byte("PK\x03\x04"))
}
func UnZip(archive, target string) error {
   reader, err := zip.OpenReader(archive)
   if err != nil {
      return err
   }
   if err := os.MkdirAll(target, 0755); err != nil {
      return err
   }
   for _, file := range reader.File {
      path := filepath.Join(target, file.Name)
      if file.FileInfo().IsDir() {
         os.MkdirAll(path, file.Mode())
         continue
      }
      fileReader, err := file.Open()
      if err != nil {
         return err
      }
      defer fileReader.Close()
      targetFile, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, file.Mode())
      if err != nil {
         return err
      }
      defer targetFile.Close()
      if _, err := io.Copy(targetFile, fileReader); err != nil {
         return err
      }
   }
   return nil
}
//压缩 使用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 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 = 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
      }
   }
   return nil
}
//解压 tar.gz
func DeCompress(tarFile, dest string) error {
   srcFile, err := os.Open(tarFile)
   if err != nil {
      return err
   }
   defer srcFile.Close()
   gr, err := gzip.NewReader(srcFile)
   if err != nil {
      return err
   }
   defer gr.Close()
   tr := tar.NewReader(gr)
   for {
      hdr, err := tr.Next()
      if err != nil {
         if err == io.EOF {
            break
         } else {
            return err
         }
      }
      filename := dest + hdr.Name
      file, err := createFile(filename)
      if err != nil {
         return err
      }
      io.Copy(file, tr)
   }
   return nil
}
func createFile(name string) (*os.File, error) {
   err := os.MkdirAll(string([]rune(name)[0:strings.LastIndex(name, "/")]), 0755)
   if err != nil {
      return nil, err
   }
   return os.Create(name)
}
func FormatNum(oNum int,n int) string {
   m := 0
   for {
      oNum = oNum / 10
      m++
      if oNum == 0 {
         break
      }
   }
   fmtStr := "%0"+strconv.Itoa(m)+"d"
   return fmt.Sprintf(fmtStr, n)
}
func FileMd5(path string) (string,error){
   file, err := os.Open(path)
   if err !=nil {
      return "",err
   }
   defer file.Close()
   _md5 := md5.New()
   if _,err := io.Copy(_md5, file);err != nil {
      return "",err
   }
   return hex.EncodeToString(_md5.Sum(nil)),nil
}