一、從gofile下載文件
在Golang中,我們可以使用gofile來下載文件。具體步驟如下:
package main
import (
"fmt"
"net/http"
"os"
)
func main() {
url := "https://golangcode.com/images/avatar.jpg"
response, err := http.Get(url)
if err != nil {
fmt.Println(err)
}
defer response.Body.Close()
file, err := os.Create("avatar.jpg")
if err != nil {
fmt.Println(err)
}
defer file.Close()
_, err = io.Copy(file, response.Body)
if err != nil {
fmt.Println(err)
}
}
在上述代碼中,我們首先向服務器發送請求,獲取到了一個http.Response對象,其中包含了服務器返回的數據。我們藉助這個對象,獲取了文件的二進制數據。然後我們創建了一個空文件,並將響應中的二進制數據複製到該文件中。
二、gost文件下載
使用Golang創建HTTP請求來下載文件是一種非常流行的方法。 Gost是一個很好的開源庫,網絡上已經有很多例子。你可以使用這個庫來下載文件。具體步驟如下:
package main
import (
"fmt"
"net/http"
"os"
)
func main() {
url := "https://golangcode.com/images/avatar.jpg"
response, err := http.Get(url)
if err != nil {
fmt.Println(err)
}
defer response.Body.Close()
file, err := os.Create("avatar.jpg")
if err != nil {
fmt.Println(err)
}
defer file.Close()
// Starts downloading the file
_, err = io.Copy(file, response.Body)
if err != nil {
fmt.Println(err)
}
}
在上述代碼中,我們通過gost庫創建了一個HTTP請求,然後從服務器獲取了一個http.Response對象。我們利用該對象的數據來創建一個空文件作為我們下載的目標文件。然後我們將響應中的二進制數據複製到該文件中。
三、實現進度條下載
在實際情況中,我們希望能夠在下載文件時看到進度條,這樣可以確保下載文件的速度。Golang中在下載文件時同樣支持實現進度條。具體步驟如下:
package main
import (
"fmt"
"io"
"net/http"
"os"
)
func main() {
fileUrl := "https://dl.google.com/go/go1.13.10.linux-amd64.tar.gz"
err := DownloadFile("go.tar.gz", fileUrl)
if err != nil {
panic(err)
}
fmt.Println("Downloaded: " + fileUrl)
}
// DownloadFile will download a url to a local file.
// It's efficient because it will write as it downloads
// and not load the whole file into memory.
func DownloadFile(filepath string, url string) error {
// Get the data
resp, err := http.Get(url)
if err != nil {
return err
}
defer resp.Body.Close()
// Create the file
out, err := os.Create(filepath)
if err != nil {
return err
}
defer out.Close()
// Write the body to file
_, err = io.Copy(out, resp.Body)
if err != nil {
return err
}
return nil
}
在上述代碼中,我們通過http.Get方法獲取了http.Response對象。該對象中包含了響應流數據,我們利用該對象創建了一個空文件。同時,在將響應流數據複製到該文件時,我們通過io.Copy方法,將數據流分塊讀出,並且逐個分塊寫入空文件中。在分塊處理流數據的過程中,我們可以計算出下載進度,並且在控制台輸出進度條。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/184935.html