123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- package tool
- import (
- "fmt"
- "github.com/qiniu/go-sdk/v7/storage"
- "io"
- "net/http"
- "os"
- "strings"
- "time"
- )
- func DownloadFile(url, path string) (pathRes, downloadRes bool) {
- var res *http.Response
- tt := strings.Split(path, "/")
- pathDir := strings.TrimSuffix(path, tt[len(tt)-1])
- pathDir = strings.TrimSuffix(pathDir, "/")
- err := os.MkdirAll(pathDir, 0777)
- if err != nil {
- fmt.Printf("mkdir file failed:[%s], error:[%v], path:[%s]\n", pathDir, err, path)
- return false, false
- } else {
- fmt.Printf("mkdir file success:[%s], error:[%v], path:[%s]\n", pathDir, err, path)
- }
- _ = os.Remove(path)
- buffer, err := os.Create(path)
- if err != nil {
- fmt.Printf("open file failed, error:%v, path:[%s]\n", err, path)
- return false, false
- } else {
- fmt.Printf("open file success, error:%v, path:[%s]\n", err, path)
- }
- defer buffer.Close()
-
- flag := 0
- for i := 0; i < 3; i++ {
- for {
-
- client := &http.Client{}
- req, err2 := http.NewRequest("GET", url, nil)
- if err2 != nil {
- fmt.Printf("make new http request [%s] error: [%v]\n", url, err2)
- return true, false
- }
- currentDate := time.Now().Format("Mon, 02 Jan 2006 15:04:05 GMT")
-
-
-
-
-
-
-
- req.Header.Add("Date", currentDate)
-
-
- res, err2 = client.Do(req)
- if err2 != nil {
- fmt.Printf("send http req [%s] error: [%v]\n", url, err2)
- return true, false
- }
- if res.StatusCode != 200 {
- fmt.Printf("download failed:[%s], StatusCode:[%d],url:[%s]\n", path, res.StatusCode, url)
- res.Body.Close()
- if i >= 2 {
- return true, false
- } else {
- flag = 1
- break
- }
- }
- flag = 0
- break
- }
- if flag == 1 {
- time.Sleep(1 * time.Second)
- continue
- }
- buf := make([]byte, 102400)
- for {
- n, err := res.Body.Read(buf)
- if err != nil && err != io.EOF {
- fmt.Printf("Download failed:[%s], error:%v, path:[%s]\n", url, err, path)
- res.Body.Close()
- if i >= 2 {
- return true, false
- } else {
- flag = 1
- break
- }
- }
- buffer.Write(buf[:n])
- if err == io.EOF {
- res.Body.Close()
- flag = 2
- break
- }
- }
- if flag == 1 {
- time.Sleep(1 * time.Second)
- continue
- } else if flag == 2 {
- break
- }
- }
- fmt.Printf("Download success:[%s], path:[%s]\n", url, path)
- return true, true
- }
- func Zone(zoneStr string) *storage.Region {
- zone := &storage.ZoneHuadong
- switch {
- case zoneStr == "hd":
- zone = &storage.ZoneHuadong
- case zoneStr == "hb":
- zone = &storage.ZoneHuabei
- case zoneStr == "hn":
- zone = &storage.ZoneHuanan
- case zoneStr == "xkp":
- zone = &storage.ZoneXinjiapo
- default:
- zone = &storage.ZoneHuadong
- }
- return zone
- }
|