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
+17.8k Golang : Check if a directory exist or not
+16.6k Golang : How to generate QR codes?
+11.4k How to tell if a binary(executable) file or web application is built with Golang?
+6k Golang : How to get capacity of a slice or array?
+10.9k Golang : Fix - does not implement sort.Interface (missing Len method)
+23.2k Golang : minus time with Time.Add() or Time.AddDate() functions to calculate past date
+16.1k Golang : Find out mime type from bytes in buffer
+12k Golang : How to check if a string starts or ends with certain characters or words?
+4.5k MariaDB/MySQL : Form select statement or search query with Chinese characters
+36.2k Golang : Converting a negative number to positive number
+5k Golang : Calculate half life decay example
+18.4k Golang : Display list of time zones with GMT