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
+6.3k CodeIgniter : form input set_value cause " to become & quot
+32.1k Golang : Convert []string to []byte examples
+18.5k Golang : Set, Get and List environment variables
+5.6k Unix/Linux/MacOSx : Get local IP address
+18.9k Golang : Display list of time zones with GMT
+18k Golang : Convert IPv4 address to decimal number(base 10) or integer
+28.4k Golang : Read, Write(Create) and Delete Cookie example
+6.6k Golang : Derive cryptographic key from passwords with Argon2
+10.5k Android Studio : Simple input textbox and intercept key example
+35.8k Golang : Get file last modified date and time