黑窗口下带进度条的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