Golang: remote filesize with progress bar demo
This commit is contained in:
parent
1a1f22299f
commit
285796120c
53
golearn/remote_filesize/remote_filesize.go
Normal file
53
golearn/remote_filesize/remote_filesize.go
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
"os"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
pb "gopkg.in/cheggaaa/pb.v1"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
url := "https://repo.voidlinux.eu/live/current/void-live-x86_64-20170220-lxde.iso"
|
||||||
|
|
||||||
|
// we are interested in getting the file or object name
|
||||||
|
// so take the last item from the slice
|
||||||
|
subStringsSlice := strings.Split(url, "/")
|
||||||
|
fileName := subStringsSlice[len(subStringsSlice)-1]
|
||||||
|
|
||||||
|
resp, err := http.Head(url)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Is our request ok?
|
||||||
|
|
||||||
|
if resp.StatusCode != http.StatusOK {
|
||||||
|
fmt.Println(resp.Status)
|
||||||
|
os.Exit(1)
|
||||||
|
// exit if not ok
|
||||||
|
}
|
||||||
|
|
||||||
|
// the Header "Content-Length" will let us know
|
||||||
|
// the total file size to download
|
||||||
|
size, _ := strconv.Atoi(resp.Header.Get("Content-Length"))
|
||||||
|
downloadSize := int(size)
|
||||||
|
bytesTokilobytes := downloadSize / 1024 / 1024
|
||||||
|
|
||||||
|
fmt.Println("Will be downloading ", fileName, " of ", bytesTokilobytes, " MegaBytes.")
|
||||||
|
|
||||||
|
count := bytesTokilobytes
|
||||||
|
bar := pb.StartNew(count)
|
||||||
|
for i := 0; i < count; i++ {
|
||||||
|
bar.Increment()
|
||||||
|
bar.ShowTimeLeft = true
|
||||||
|
time.Sleep(time.Millisecond)
|
||||||
|
}
|
||||||
|
bar.FinishPrint("The End!")
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user