您好,登錄后才能下訂單哦!
package main import ( "flag" "fmt" "io" "log" "net/http" "os" "strconv" "strings" "time" "github.com/cheggaaa/pb" ) var ( url = flag.String("url", "", "The download file URL.") ) func Usage() { fmt.Printf("Usage of %s:\n -url=\"http://www.xxx.com/file.exe\": The download file URL.\n", os.Args[0]) os.Exit(1) } func main() { flag.Parse() if os.Args == nil || *url == "" { Usage() } // 解析/后的文件名字 urlMap := strings.Split(*url, "/") fileName := urlMap[len(urlMap)-1] // 解析帶? = fileName 的文件名字 if strings.Contains(fileName, "=") { splitName := strings.Split(fileName, "=") fileName = splitName[len(splitName)-1] } resp, err := http.Get(*url) if err != nil { log.Fatal(err) } // 判斷get url的狀態碼, StatusOK = 200 if resp.StatusCode == http.StatusOK { log.Printf("[INFO] 正在下載: [%s]", fileName) fmt.Print("\n") downFile, err := os.Create(fileName) if err != nil { log.Fatal(err) } // 不要忘記關閉打開的文件. defer downFile.Close() // 獲取下載文件的大小 i, _ := strconv.Atoi(resp.Header.Get("Content-Length")) sourceSiz := int64(i) source := resp.Body // 創建一個進度條 bar := pb.New(int(sourceSiz)).SetUnits(pb.U_BYTES).SetRefreshRate(time.Millisecond * 10) // 顯示下載速度 bar.ShowSpeed = true // 顯示剩余時間 bar.ShowTimeLeft = true // 顯示完成時間 bar.ShowFinalTime = true bar.SetMaxWidth(80) bar.Start() writer := io.MultiWriter(downFile, bar) io.Copy(writer, source) bar.Finish() fmt.Print("\n") log.Printf("[INFO] [%s]下載成功.", fileName) } else { fmt.Print("\n") log.Printf("[ERROR] [%s]下載失敗,%s.", fileName, resp.Status) } }
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。