package utils import ( // "fmt" "os" "io" "path" "net/http" "archive/tar" "compress/gzip" ) func DownloadFromUrl(dest string, url string, chmod os.FileMode) error { resp, err := http.Get(url) if err != nil { return err } defer resp.Body.Close() out, err := os.Create(dest) defer out.Close() if err != nil { return err } _, err = io.Copy(out, resp.Body) if err != nil { return err } os.Chmod(dest, chmod) return nil } func ExtractTarGz(dest string, gzipStream io.Reader) error { uncompressedStream, err := gzip.NewReader(gzipStream) if err != nil { return err } tarReader := tar.NewReader(uncompressedStream) for true { header, err := tarReader.Next() if err == io.EOF { break } switch header.Typeflag { case tar.TypeDir: // if err := os.Mkdir(dest + "/" + header.Name, 0755); err != nil { // return err // } case tar.TypeReg: outName := dest + "/" + path.Base( header.Name) outFile, _ := os.Create(outName) if err != nil { return err } if _, err := io.Copy(outFile, tarReader); err != nil { return err } outFile.Close() } } return nil }