您好,登錄后才能下訂單哦!
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的狀態(tài)碼, 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) } // 不要忘記關(guān)閉打開的文件. defer downFile.Close() // 獲取下載文件的大小 i, _ := strconv.Atoi(resp.Header.Get("Content-Length")) sourceSiz := int64(i) source := resp.Body // 創(chuàng)建一個(gè)進(jìn)度條 bar := pb.New(int(sourceSiz)).SetUnits(pb.U_BYTES).SetRefreshRate(time.Millisecond * 10) // 顯示下載速度 bar.ShowSpeed = true // 顯示剩余時(shí)間 bar.ShowTimeLeft = true // 顯示完成時(shí)間 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) } }
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。