Maison > développement back-end > Golang > Comment télécharger et enregistrer efficacement des images à partir d'URL dans Go ?

Comment télécharger et enregistrer efficacement des images à partir d'URL dans Go ?

Susan Sarandon
Libérer: 2024-12-01 06:13:13
original
1061 Les gens l'ont consulté

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

Téléchargement et enregistrement d'images à partir d'URL dans Go

Problème :

Lors de la tentative de récupération d'une image à partir d'une URL et enregistrez-le dans un fichier, une erreur se produit : "impossible d'utiliser m (type image.Image) comme type []byte dans la fonction argument."

Analyse :

Le code d'origine convertit l'image en un objet Go image.Image (m) qui est une représentation en mémoire de l'image. Cependant, la fonction ioutil.WriteFile() attend une tranche d'octets ([]byte).

Solution :

Au lieu de convertir l'image en une représentation en mémoire , nous pouvons directement copier le corps de la réponse dans le fichier de sortie à l'aide de la fonction io.Copy. Voici une version modifiée du 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!")
}
Copier après la connexion

Explication :

  • http.Get() récupère l'image de l'URL et stocke la réponse dans réponse.
  • os.Create() crée un fichier vide à /tmp/asdf.jpg.
  • io.Copy copie l'intégralité du contenu de réponse.Body dans le fichier.
  • fmt.Println() imprime un message de réussite.

Remarques supplémentaires :

  • Ce code suppose que la réponse HTTP contient un fichier image valide.
  • Pour gérer les exceptions et les capacités de manipulation d'images plus avancées, envisagez d'utiliser une bibliothèque d'images Go dédiée telle que github.com/disintegration/imaging.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal