Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich den POST-Anfragefortschritt für große Dateien in Go verfolgen?

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

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-28 14:57:30993Durchsuche

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>

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>

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

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

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!

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