„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > So verfolgen Sie den Upload-Fortschritt in Go-HTTP-POST-Anfragen: Ein praktischer Leitfaden mit ProgressReader?

So verfolgen Sie den Upload-Fortschritt in Go-HTTP-POST-Anfragen: Ein praktischer Leitfaden mit ProgressReader?

Veröffentlicht am 04.11.2024
Durchsuche:140

How to Track Upload Progress in Go HTTP POST Requests: A Practical Guide Using ProgressReader?

So verfolgen Sie den Upload-Fortschritt in Go-HTTP-POST-Anfragen

Bei der Entwicklung eines ShareX-Klons für Linux mit Go ist dies erforderlich Überwachen Sie den Fortschritt großer Datei-Uploads, die über HTTP-POST-Anfragen gesendet werden. Das manuelle Öffnen einer TCP-Verbindung und das Schreiben von HTTP-Anfragen in Blöcken ist zwar eine Option, aber nicht die effizienteste und zuverlässigste Lösung.

ProgressReader: Ein benutzerdefinierter io.Reader

Ein effektiverer Ansatz besteht darin, einen benutzerdefinierten io.Reader zu erstellen, der den eigentlichen Reader umschließt. Dieser benutzerdefinierte Reader namens ProgressReader verfügt über eine Reporter-Funktion, die den Upload-Fortschritt bei jedem Aufruf der Read-Methode ausgibt und so eine Echtzeitüberwachung ermöglicht.

Hier ist ein Beispiel für die Umsetzung dieser Idee:

type ProgressReader struct {
    io.Reader
    Reporter func(r int64)
}

func (pr *ProgressReader) Read(p []byte) (n int, err error) {
    n, err = pr.Reader.Read(p)
    pr.Reporter(int64(n))
    return
}

Dieser benutzerdefinierte Reader wird dann verwendet, um die hochzuladende Datei zu umschließen:

file, _ := os.Open("/tmp/blah.go")
total := int64(0)
pr := &ProgressReader{file, func(r int64) {
    total  = r
    if r > 0 {
        fmt.Println("progress", r)
    } else {
        fmt.Println("done", r)
    }
}}

Abschließend werden die Daten mit io.Copy nach ioutil.Discard kopiert, das als Senke für die Daten fungiert und gleichzeitig das Drucken der Fortschrittsausgabe ermöglicht.

io.Copy(ioutil.Discard, pr)

Diese Methode bietet eine einfache und zuverlässige Möglichkeit, den Upload-Fortschritt für HTTP-POST-Anfragen in Go zu verfolgen, sodass Benutzer den Fortschritt großer Datei-Uploads in Echtzeit überwachen können.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3