登录
首页 >  Golang >  Go问答

老师我想下载一个文件,有进度显示的那种?

来源:Golang技术栈

时间:2023-03-04 17:30:36 290浏览 收藏

对于一个Golang开发者来说,牢固扎实的基础是十分重要的,golang学习网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《老师我想下载一个文件,有进度显示的那种?》,主要介绍了golang、下载文件、进度显示,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了!

问题内容

老师我想下载一个文件,有进度显示的那种?

正确答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package main
 
import (
    "fmt"
    "io"
    "net/http"
    "os"
    "strings"
 
    "github.com/dustin/go-humanize"
)
 
type WriteCounter struct {
    Total uint64
}
 
func (wc *WriteCounter) Write(p []byte) (int, error) {
    n := len(p)
    wc.Total += uint64(n)
    wc.PrintProgress()
    return n, nil
}
 
func (wc WriteCounter) PrintProgress() {
    fmt.Printf("\r%s", strings.Repeat(" ", 35))
    fmt.Printf("\rDownloading... %s complete", humanize.Bytes(wc.Total))
}
 
func main() {
    fmt.Println("Download Started")
 
    fileUrl := "https://golang-tech-stack.com/dist/images/logo/logo.png"
    err := DownloadFile("avatar.jpg", fileUrl)
    if err != nil {
        panic(err)
    }
 
    fmt.Println("Download Finished")
}
 
func DownloadFile(filepath string, url string) error {
 
    out, err := os.Create(filepath + ".tmp")
    if err != nil {
        return err
    }
 
    resp, err := http.Get(url)
    if err != nil {
        out.Close()
        return err
    }
    defer resp.Body.Close()
 
    counter := &WriteCounter{}
    if _, err = io.Copy(out, io.TeeReader(resp.Body, counter)); err != nil {
        out.Close()
        return err
    }
 
    fmt.Print("\n")
 
    out.Close()
 
    if err = os.Rename(filepath+".tmp", filepath); err != nil {
        return err
    }
    return nil
}

理论要掌握,实操不能落!以上关于《老师我想下载一个文件,有进度显示的那种?》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>