54 lines
1.1 KiB
Go
54 lines
1.1 KiB
Go
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!")
|
|
|
|
}
|