记录一下对文件进行压缩的实现,这里只列出了外围代码
/*函数名: makeTarGzip 制作压缩包,进步在线传输速率参 数: encFile , 密文文件 signFile , 签名文件返回值: 压缩后文件名 错误信息创立工夫及创建者: 2021-06-15 Yuan_sr*/func makeTarGzip(encFile, signFile string) (string, error){ tarGzipFileName = "example.tar.gz" // file write fw, err := os.Create(tarGzipFileName) if err != nil { return "", err } defer fw.Close() // gzip write gw := gzip.NewWriter(fw) defer gw.Close() // tar write tw := tar.NewWriter(gw) defer tw.Close() // 关上文件夹 dir, err := os.Open("./") if err != nil { return "", err } defer dir.Close() // 读取文件列表 fis, err := dir.Readdir(0) if err != nil { return "", err } for _, fi := range fis{ if fi.IsDir(){ continue } if fi.Name() == encFile || fi.Name() == signFile{ //去掉这个条件能够实现该目录下所有文件的压缩 ef, err := os.Open(dir.Name() + "/" + fi.Name()) if err != nil { return "", err } defer ef.Close() //信息头 h := new(tar.Header) h.Name = fi.Name() h.Size = fi.Size() h.Mode = int64(fi.Mode()) h.ModTime = fi.ModTime() //写信息头 err = tw.WriteHeader(h) if err != nil { return "", err } _, err = io.Copy(tw, ef) if err != nil { return "", err } } } return tarGzipFileName, err}/*函数名: unTarGzip 文件解压缩参 数: tarGzipFile , 待解压缩文件返回值: 错误信息创立工夫及创建者: 2021-06-15 Yuan_sr*/func unTarGzip (tarGzipFile string) error { fr, err := os.Open(tarGzipFile) if err != nil { return err } defer fr.Close() gr, err := gzip.NewReader(fr) if err != nil { return err } defer gr.Close() tr := tar.NewReader(gr) for { h, err := tr.Next() if err == io.EOF { break } if err != nil { return err } fw, err := os.OpenFile(h.Name, os.O_CREATE | os.O_WRONLY, 0755) if err != nil { return err } defer fw.Close() _, err = io.Copy(fw, tr) if err != nil { return err } } return nil}