问题描述
最近做广告业务获取某推的广告成效,与其他渠道不同的是,最终拿到的成效数据是一个压缩包的HTTP流数据。
将数据写入到本地生成了一个以.gz为后缀的压缩包文件,解压以后的文件存放着json格式的成效数据。
当然需要程序去解压缩这个压缩包获取里面的文件了。
内置tar包的问题
参考网上大佬们之前的解决方案写了一段测试代码:
// TODO:解压gz文件 func decompressionGZ(fileName string) error { filePath := GZIPS_PATH + fileName // file read fr, err := os.Open(filePath) if err != nil { return err } fmt.Println("fr>>> ", fr) defer fr.Close() // gzip read // TODO:这一步会校验文件的Header gr, err := gzip.NewReader(fr) fmt.Println("gr_before>>> ", gr) //createTime := time.Date(2020, 01, 01, 00, 00, 00, 00, TIME_LOCATION_CST) //gr.Header.Comment = "xxx" //gr.Header.Name = "whw" //gr.Header.ModTime = createTime //fmt.Println("gr.after>>>>> ", gr) fmt.Println("gr.Header>>>>> ", gr.Header) fmt.Println("gr.err>>>>>> ", err) if err != nil { return err } defer gr.Close() // tar read tr := tar.NewReader(gr) //fmt.Println("tr>>> ", tr) // 读取文件 for { h, err := tr.Next() fmt.Println("h_err>>>>>> ", err) fmt.Println("h>>> ", h) if err == io.EOF { break } if err != nil { fmt.Println("err0>>> ", err) return err } // 打开文件 fw, err := os.OpenFile("xxx.json", os.O_CREATE|os.O_WRONLY, os.ModePerm) if err != nil { fmt.Println("err1...... ", err) return err } defer fw.Close() // 写文件 _, err = io.Copy(fw, tr) if err != nil { fmt.Println("err2>>> ", err) return err } } return nil }使用原生golang包tar解压的函数