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!