Wie kann ich den POST-Anfragefortschritt für große Dateien in Go verfolgen?

Mary-Kate Olsen
Freigeben: 2024-10-28 14:57:30
Original
995 Leute haben es durchsucht

How to Track POST Request Progress for Large Files in Go?

Verfolgen des POST-Anfragefortschritts in Go

Problem:

Entwickler, die mithilfe von POST Dateifreigabeanwendungen in Go erstellen möchten Anfragen stehen vor Herausforderungen bei der Überwachung des Upload-Fortschritts für große Dateien, die längere Upload-Zeiten erfordern.

Lösung:

Umschlossener io.Reader mit Fortschrittsverfolgung:

Anstatt eine zwischengeschaltete TCP-Verbindung zu nutzen, besteht ein alternativer Ansatz darin, einen benutzerdefinierten io.Reader-Wrapper um den eigentlichen Dateireader zu erstellen. Dies ermöglicht die Fortschrittsverfolgung bei jedem Aufruf der Lesefunktion.

Code-Implementierung:

Hier ist eine Beispielimplementierung:

<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

Zu verwenden Dieser Wrapper schließt den eigentlichen Dateileser in den ProgressReader ein:

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

Anschließend kann der Fortschritt verfolgt werden, indem der Inhalt an einen Speicherort kopiert wird:

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

Diese Methode ermöglicht eine nahtlose Überwachung des Upload-Fortschritts für große Dateien mithilfe von POST-Anfragen.

Das obige ist der detaillierte Inhalt vonWie kann ich den POST-Anfragefortschritt für große Dateien in Go verfolgen?. 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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!