Home > Backend Development > Golang > How to Efficiently Download and Save Images from URLs in Go?

How to Efficiently Download and Save Images from URLs in Go?

Susan Sarandon
Release: 2024-12-01 06:13:13
Original
1039 people have browsed it

How to Efficiently Download and Save Images from URLs in Go?

Downloading and Saving Images from URLs in Go

Problem:

When attempting to retrieve an image from a URL and save it to a file, an error occurs: "cannot use m (type image.Image) as type []byte in function argument."

Analysis:

The original code converts the image into a Go image.Image object (m) which is an in-memory representation of the image. However, the ioutil.WriteFile() function expects a byte slice ([]byte).

Solution:

Instead of converting the image to an in-memory representation, we can directly copy the response body to the output file using the io.Copy function. Here's a modified version of the code:

package main

import (
    "fmt"
    "io"
    "log"
    "net/http"
    "os"
)

func main() {
    url := "http://i.imgur.com/m1UIjW1.jpg"
    // don't worry about errors
    response, err := http.Get(url)
    if err != nil {
        log.Fatal(err)
    }
    defer response.Body.Close()

    //open a file for writing
    file, err := os.Create("/tmp/asdf.jpg")
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()

    // Use io.Copy to just dump the response body to the file. This supports huge files
    _, err = io.Copy(file, response.Body)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println("Success!")
}
Copy after login

Explanation:

  • http.Get() retrieves the image from the URL and stores the response in response.
  • os.Create() creates an empty file at /tmp/asdf.jpg.
  • io.Copy copies the entire contents of response.Body into the file.
  • fmt.Println() prints a success message.

Additional Notes:

  • This code assumes the HTTP response contains a valid image file.
  • For handling exceptions and more advanced image manipulation capabilities, consider using a dedicated Go image library such as github.com/disintegration/imaging.

The above is the detailed content of How to Efficiently Download and Save Images from URLs in Go?. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template