Heim >Backend-Entwicklung >Golang >Wie kann ich Bilder von URLs in Go effizient herunterladen und speichern?

Wie kann ich Bilder von URLs in Go effizient herunterladen und speichern?

Susan Sarandon
Susan SarandonOriginal
2024-12-01 06:13:13965Durchsuche

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

Herunterladen und Speichern von Bildern von URLs in Go

Problem:

Beim Versuch, ein Bild von einer URL abzurufen und Wenn Sie es in einer Datei speichern, tritt ein Fehler auf: „M (Typ image.Image) kann nicht als Typ []Byte in der Funktion verwendet werden.“ Argument."

Analyse:

Der Originalcode wandelt das Bild in ein Go image.Image-Objekt (m) um, das eine speicherinterne Darstellung des Bildes ist. Allerdings erwartet die Funktion ioutil.WriteFile() ein Byte-Slice ([]Byte).

Lösung:

Anstatt das Bild in eine speicherinterne Darstellung zu konvertieren können wir den Antworttext mit der Funktion io.Copy direkt in die Ausgabedatei kopieren. Hier ist eine modifizierte Version des Codes:

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

Erklärung:

  • http.Get() ruft das Bild von der URL ab und speichert die Antwort in Antwort.
  • os.Create() erstellt eine leere Datei unter /tmp/asdf.jpg.
  • io.Copy kopiert den gesamten Inhalt von „response.Body“ in die Datei.
  • fmt.Println() druckt eine Erfolgsmeldung.

Zusätzliche Hinweise:

  • Dieser Code geht davon aus, dass die HTTP-Antwort a enthält gültige Bilddatei.
  • Zur Behandlung von Ausnahmen und erweiterten Bildbearbeitungsfunktionen sollten Sie die Verwendung einer speziellen Go-Bildbibliothek wie github.com/disintegration/imaging in Betracht ziehen.

Das obige ist der detaillierte Inhalt vonWie kann ich Bilder von URLs in Go effizient herunterladen und speichern?. 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