下载文件并显示进度
参考文档: https://juejin.cn/post/7176452708704976953
package main
import (
"fmt"
"io"
"net/http"
"os"
)
type MyDownloader struct {
io.Reader
Total int64
Current int64
}
func (d *MyDownloader) Read(p []byte) (n int, err error) {
n, err = d.Reader.Read(p)
d.Current += int64(n)
fmt.Printf("\ncurrent download, download process: %.2f%%", float64(d.Current*10000/d.Total)/100)
if d.Current == d.Total {
fmt.Printf("\ndownload finish, download process: %.2f%%", float64(d.Current*10000/d.Total)/100)
}
return
}
func downloadFile(url, filePath string) {
resp, err := http.Get(url)
if err != nil {
panic(err)
}
defer resp.Body.Close()
file, err := os.Create(filePath)
if err != nil {
panic(err)
}
defer file.Close()
myDownloader := &MyDownloader{
Reader: resp.Body,
Total: resp.ContentLength,
}
if _, err := io.Copy(file, myDownloader); err != nil {
panic(err)
}
}
func main() {
url := "http://wl.wldev.com:9001/api/ng-server/fs/raw/vscode/4.18.0_linux_amd64/code-server.tar.gz?ngScope=app-store&auth=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MDE0OTc0ODgsImlhdCI6MTcwMTQxMTA4OCwiaXNzIjoid2wiLCJhdXRoRGF0YSI6eyJpZCI6MSwidXNlcm5hbWUiOiJhZG1pbiJ9fQ.yvYDZrU-LGWZPAeFtKxs75sOaAS4ahKvvKAujU-K35Y×tamp=1701427439151"
filename := "./wegame.zip"
downloadFile(url, filename)
}