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
1029 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!

source:php.cn
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