Maison >développement back-end >Golang >Comment résoudre l'erreur « Impossible d'utiliser m (type image.Image) comme type []byte » lors de l'enregistrement d'images à partir d'URL dans Go ?

Comment résoudre l'erreur « Impossible d'utiliser m (type image.Image) comme type []byte » lors de l'enregistrement d'images à partir d'URL dans Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-30 08:00:171016parcourir

How to Solve the

Comment enregistrer une image à partir d'une URL dans un fichier : surmonter l'impossibilité d'utiliser m (type image.Image) comme type []erreur d'octet

Obtenir une image à partir d'une URL et l'enregistrer dans un fichier est une tâche courante dans de nombreuses applications de programmation. Dans Go, cela peut être réalisé en utilisant les packages http et image. Cependant, vous pouvez rencontrer une erreur lorsque vous tentez de transmettre le type image.Image à la fonction ioutil.WriteFile.

Le message d'erreur "Impossible d'utiliser m (type image.Image) comme type []byte dans la fonction argument", indique que le type image.Image ne peut pas être écrit directement dans un fichier. En effet, la fonction ioutil.WriteFile attend une tranche d'octets ([]byte) comme deuxième argument.

La bonne façon d'enregistrer une image dans un fichier dans cette situation est d'éviter complètement de décoder l'image. Au lieu de cela, vous pouvez directement copier le corps de la réponse, qui contient les données de l'image, dans un fichier.

package main

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

func main() {
    url := "http://i.imgur.com/m1UIjW1.jpg"
    // don't worry about errors
    response, e := http.Get(url)
    if e != nil {
        log.Fatal(e)
    }
    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!")
}

Dans ce code modifié :

  1. Nous ne décodons pas l'image en utilisant image.Decode.
  2. Nous ouvrons un fichier en écriture en utilisant os.Create.
  3. Nous utilisons io.Copy pour copier directement le corps de réponse, qui contient les données d’image brutes, au fichier. Cela nous permet d'enregistrer l'image dans un fichier sans avoir besoin de décodage.

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:
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