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  }