package pkg import ( "errors" "io" "mime/multipart" "os" "packet-ui/pkg/md5" "path/filepath" ) func FileSave(r io.Reader, dst string) (err error) { var ( fp string out io.WriteCloser ) fp, _ = filepath.Split(dst) err = DirCheck(fp) out, err = os.Create(dst) if err != nil { return err } defer out.Close() _, err = io.Copy(out, r) return } // FileMD5 计算文件 md5 值 func FileMD5(file string) (string, error) { f, err := os.Open(file) if err != nil { return "", err } info, err := f.Stat() if err != nil { return "", err } size := info.Size() return md5.Sum(f, size, BlockSize, ChunkSize) } func MultipartMD5(fh *multipart.FileHeader) (string, error) { f, err := fh.Open() if err != nil { return "", err } size := fh.Size return md5.Sum(f, size, BlockSize, ChunkSize) } const ( BlockSize = 1 << 10 ChunkSize = BlockSize << 2 ) var ( ErrorIsNotDir = errors.New("path is not dir. ") ) func DirCheck(dir string) (err error) { var fi os.FileInfo if fi, err = os.Stat(dir); err != nil { if !os.IsExist(err) || os.IsNotExist(err) { return DirMk(dir) } } if !fi.IsDir() { err = ErrorIsNotDir } return } func DirMk(dir string) error { return os.MkdirAll(dir, 0755) }