github.com/easysoft/zendata@v0.0.0-20240513203326-705bd5a7fd67/pkg/utils/file/download.go (about) 1 package fileUtils 2 3 import ( 4 "fmt" 5 "io/ioutil" 6 "net/http" 7 "path/filepath" 8 9 i118Utils "github.com/easysoft/zendata/pkg/utils/i118" 10 logUtils "github.com/easysoft/zendata/pkg/utils/log" 11 "github.com/fatih/color" 12 ) 13 14 func Download(url string, dst string) (err error) { 15 fmt.Printf("DownloadToFile From: %s to %s.\n", url, dst) 16 17 MkDirIfNeeded(filepath.Dir(dst)) 18 19 var data []byte 20 data, err = HTTPDownload(url) 21 if err == nil { 22 logUtils.PrintTo(i118Utils.Sprintf("file_downloaded", url)) 23 24 err = WriteDownloadFile(dst, data) 25 if err == nil { 26 logUtils.Info(i118Utils.Sprintf("file_download_saved", url, dst)) 27 } 28 } 29 30 return 31 } 32 33 func HTTPDownload(uri string) ([]byte, error) { 34 res, err := http.Get(uri) 35 if err != nil { 36 logUtils.Infof(color.RedString("download file failed, error: %s.", err.Error())) 37 } 38 defer res.Body.Close() 39 d, err := ioutil.ReadAll(res.Body) 40 if err != nil { 41 logUtils.Infof(color.RedString("read downloaded file failed, error: %s.", err.Error())) 42 } 43 return d, err 44 } 45 46 func WriteDownloadFile(dst string, d []byte) error { 47 err := ioutil.WriteFile(dst, d, 0444) 48 if err != nil { 49 logUtils.Infof(color.RedString("write download file failed, error: %s.", err.Error())) 50 } 51 return err 52 }