golang - golang download file with progress 간단한 콘솔 진행바 프로그레스바
이 름 : 바다아이
|
조회수 : 9043
짧은 주소 : https://www.bada-ie.com/su/?761591799068
package main
/**
* @website http://albulescu.ro
* @author Cosmin Albulescu <cosmin@albulescu.ro>
*/import (
"bytes""fmt""io""log""net/http""os""path""strconv""time"
)
funcPrintDownloadPercent(done chanint64, path string, total int64) {
var stop bool = falsefor {
select {
case <-done:
stop = truedefault:
file, err := os.Open(path)
if err != nil {
log.Fatal(err)
}
fi, err := file.Stat()
if err != nil {
log.Fatal(err)
}
size := fi.Size()
if size == 0 {
size = 1
}
var percent float64 = float64(size) / float64(total) * 100
fmt.Printf("%.0f", percent)
fmt.Println("%")
}
if stop {
break
}
time.Sleep(time.Second / 5)
}
}
funcDownloadFile(url string, dest string) {
file := path.Base(url)
log.Printf("Downloading file %s from %s\n", file, url)
var path bytes.Buffer
path.WriteString(dest)
path.WriteString("/")
path.WriteString(file)
start := time.Now()
out, err := os.Create(path.String())
if err != nil {
fmt.Println(path.String())
panic(err)
}
defer out.Close()
headResp, err := http.Head(url)
if err != nil {
panic(err)
}
defer headResp.Body.Close()
size, err := strconv.Atoi(headResp.Header.Get("Content-Length"))
if err != nil {
panic(err)
}
done := make(chanint64)
go PrintDownloadPercent(done, path.String(), int64(size))
resp, err := http.Get(url)
if err != nil {
panic(err)
}
defer resp.Body.Close()
n, err := io.Copy(out, resp.Body)
if err != nil {
panic(err)
}
done <- n
elapsed := time.Since(start)
log.Printf("Download completed in %s", elapsed)
}
funcmain() {
DownloadFile("https://wordpress.org/wordpress-4.4.2.zip", "./")
}
p.s
간단하면서 여러가지 응용할 수 있는 소스입니다.
진행바 부분은 디자인 하기 나름이고...
go루틴에 채널...그러고 보면 golang 이 작업하기 참 편한 언어입니다. ^^
출처 : https://gist.github.com/albulescu/e61979cc852e4ee8f49
|
|
번 호
카테고리
제 목
이름
조회수
Copyright ⓒ 2001.12. bada-ie.com. All rights reserved.
이 사이트는 리눅스에서 firefox 기준으로 작성되었습니다. 기타 브라우저에서는 다르게 보일 수 있습니다.
[ Ubuntu + GoLang + PostgreSQL + Mariadb ]
서버위치 : 오라클 클라우드 춘천 실행시간 : 0.06154 초 to webmaster... gogo sea. gogo sea.