Heim > Backend-Entwicklung > Golang > 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?

Patricia Arquette
Freigeben: 2024-10-29 17:39:02
Original
974 Leute haben es durchsucht

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:

<code class="go">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
}</code>
Nach dem Login kopieren

Dieser benutzerdefinierte Reader wird dann verwendet, um die hochzuladende Datei zu verpacken:

<code class="go">file, _ := os.Open("/tmp/blah.go")
total := int64(0)
pr := &amp;ProgressReader{file, func(r int64) {
    total += r
    if r > 0 {
        fmt.Println("progress", r)
    } else {
        fmt.Println("done", r)
    }
}}</code>
Nach dem Login kopieren

Schließlich werden die Daten mit io.Copy nach ioutil.Discard kopiert, das als Senke für die Daten fungiert Dabei kann weiterhin die Fortschrittsausgabe gedruckt werden.

<code class="go">io.Copy(ioutil.Discard, pr)</code>
Nach dem Login kopieren

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 -Zeit.

Das obige ist der detaillierte Inhalt vonSo verfolgen Sie den Upload-Fortschritt in Go-HTTP-POST-Anfragen: Ein praktischer Leitfaden mit ProgressReader?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage