Heim >Backend-Entwicklung >Golang >Wie löse ich den Fehler „M (Typ image.Image) kann nicht als Typ []Byte verwendet werden' beim Speichern von Bildern von URLs in Go?

Wie löse ich den Fehler „M (Typ image.Image) kann nicht als Typ []Byte verwendet werden' beim Speichern von Bildern von URLs in Go?

Susan Sarandon
Susan SarandonOriginal
2024-11-30 08:00:171006Durchsuche

How to Solve the

So speichern Sie ein Bild von einer URL in eine Datei: Überwindung des Cannot Use m (type image.Image) as Type []byte Error

Das Abrufen eines Bildes von einer URL und das Speichern in einer Datei ist eine häufige Aufgabe in vielen Programmieranwendungen. In Go kann dies mithilfe der http- und image-Pakete erreicht werden. Beim Versuch, den Typ „image.Image“ an die Funktion „ioutil.WriteFile“ zu übergeben, kann jedoch ein Fehler auftreten.

Die Fehlermeldung „m (Typ image.Image) kann nicht als Typ []Byte in der Funktion verwendet werden.“ Argument“ gibt an, dass der Typ image.Image nicht direkt in eine Datei geschrieben werden kann. Dies liegt daran, dass die Funktion ioutil.WriteFile als zweites Argument ein Byte-Slice ([]Byte) erwartet.

Der richtige Weg, ein Bild in einer Datei in dieser Situation zu speichern, besteht darin, die Dekodierung des Bildes insgesamt zu vermeiden. Stattdessen können Sie den Antworttext, der die Bilddaten enthält, direkt in eine Datei kopieren.

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!")
}

In diesem geänderten Code:

  1. Wir dekodieren das Bild nicht mit image.Decode.
  2. Wir öffnen eine Datei zum Schreiben mit os.Create.
  3. Wir verwenden io.Copy zum direkten Kopieren den Antworttext, der die Rohbilddaten enthält, in die Datei. Dadurch können wir das Bild in einer Datei speichern, ohne dass eine Dekodierung erforderlich ist.

Das obige ist der detaillierte Inhalt vonWie löse ich den Fehler „M (Typ image.Image) kann nicht als Typ []Byte verwendet werden' beim Speichern von Bildern von URLs in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn