Golang : Download file example
Continuing from previous tutorial on how to use http.Get()
function, in this tutorial, we will learn how to download/get file from another server via the http.Get()
function and save the content into a file.
This program will
figure out the filename to be created based on the given URL
check if there is redirection and handle it
report the Get status
save the content to a file
print out the bytes downloaded.
downloadfile.go
package main
import (
"fmt"
"io"
"net/http"
"net/url"
"os"
"strings"
)
func main() {
fmt.Println("Downloading file...")
rawURL := "https://d1ohg4ss876yi2.cloudfront.net/golang-resize-image/big.jpg"
fileURL, err := url.Parse(rawURL)
if err != nil {
panic(err)
}
path := fileURL.Path
segments := strings.Split(path, "/")
fileName := segments[2] // change the number to accommodate changes to the url.Path position
file, err := os.Create(fileName)
if err != nil {
fmt.Println(err)
panic(err)
}
defer file.Close()
check := http.Client{
CheckRedirect: func(r *http.Request, via []*http.Request) error {
r.URL.Opaque = r.URL.Path
return nil
},
}
resp, err := check.Get(rawURL) // add a filter to check redirect
if err != nil {
fmt.Println(err)
panic(err)
}
defer resp.Body.Close()
fmt.Println(resp.Status)
size, err := io.Copy(file, resp.Body)
if err != nil {
panic(err)
}
fmt.Printf("%s with %v bytes downloaded", fileName, size)
}
Output :
Downloading file...
200 OK
big.jpg with 150042 bytes downloaded
References :
See also : Golang : http.Get example
By Adam Ng
IF you gain some knowledge or the information here solved your programming problem. Please consider donating to the less fortunate or some charities that you like. Apart from donation, planting trees, volunteering or reducing your carbon footprint will be great too.
Advertisement
Tutorials
+7.9k Golang : Get all countries phone codes
+18.3k Golang : Aligning strings to right, left and center with fill example
+14.3k Golang : Find network of an IP address
+7.4k Golang : Detect sample rate, channels or latency with PortAudio
+15.9k Golang : Get sub string example
+12.2k Golang : 2 dimensional array example
+25.2k Golang : Convert long hexadecimal with strconv.ParseUint example
+4.6k Linux/MacOSX : How to symlink a file?
+19.1k Golang : Calculate entire request body length during run time
+25.6k Golang : How to write CSV data to file
+4.9k Golang : micron to centimeter example
+11.5k Golang : Convert(cast) float to int