黑窗口下带进度条的http下载-创新互联
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) } }创新互联主要从事网站设计、成都网站设计、网页设计、企业做网站、公司建网站等业务。立足成都服务南县,10多年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:13518219792
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
文章名称:黑窗口下带进度条的http下载-创新互联
网址分享:http://azwzsj.com/article/coodpe.html