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
+37.7k Golang : Convert to io.ReadSeeker type
+4.2k Golang : Get FX sentiment from website example
+7.2k Golang : Check if integer is power of four example
+12.9k Golang : convert(cast) string to float value
+11.9k Golang : Handle or parse date string with Z suffix(RFC3339) example
+22.6k Golang : Generate MD5 checksum of a file
+12.6k Golang : How to determine if a year is leap year?
+18.4k Golang : Determine if directory is empty with os.File.Readdir() function
+5.2k Javascript : Get operating system and browser information
+3.9k Golang : Get a list of crosses(instruments) available to trade from Oanda account
+4.9k Cash Flow : 50 days to pay your credit card debt
+12.8k Android Studio : Use image as AlertDialog title with custom layout example