Heim > Artikel > Backend-Entwicklung > Wie kann ich den Upload-Fortschritt für POST-Anfragen in Go verfolgen?
Upload-Fortschrittsverfolgung für POST-Anfragen in Go erreichen
Auf der Suche nach der Erstellung eines ShareX-Klons für Linux, der Dateien nahtlos über HTTP POST hochlädt Anfragen stellt sich eine entscheidende Frage: Wie kann der Upload-Fortschritt effektiv verfolgt werden, insbesondere bei größeren Dateien, deren Übertragung Minuten dauern kann?
Während das manuelle Herstellen einer TCP-Verbindung und das Senden von HTTP-Anfragen in Blöcken eine praktikable Lösung ist, ist sie hilfreich Einschränkungen beim Umgang mit HTTPS-Sites und möglicherweise nicht der effizienteste Ansatz. Glücklicherweise bietet Go eine Alternative, die die Fortschrittsverfolgung mühelos in Ihren Anfrageprozess integriert.
Anpassen von io.Reader für die Fortschrittsüberwachung
Die wichtigsten Erkenntnisse liegen in der Erstellung eines benutzerdefinierten io .Reader, der den eigentlichen Reader umschließt. Durch Überschreiben der Read()-Methode können Sie den Fortschritt bei jedem Read-Aufruf erfassen.
Beachten Sie den folgenden Codeausschnitt:
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 }
In dieser Struktur Reporter ist eine Callback-Funktion, die die Anzahl der gelesenen Bytes als Argument empfängt. Der ProgressReader fängt dann den Read-Vorgang ab und meldet den Fortschritt an den Callback.
Implementierung in der Praxis
Um dieses Konzept in die Praxis umzusetzen, müssen Sie kann die folgenden Schritte ausführen:
Erstellen Sie eine Instanz von ProgressReader und umschließen Sie Ihren Dateireader:
file, _ := os.Open("/tmp/blah.go") pr := &ProgressReader{file, func(r int64) { ... }}
Definieren Sie die zu verarbeitende Reporter-Funktion Fortschrittsaktualisierungen:
pr.Reporter = func(r int64) { total += r if r > 0 { fmt.Println("progress", r) } else { fmt.Println("done", r) } }
Führen Sie die Dateikopie mit Ihrem benutzerdefinierten Reader durch:
io.Copy(ioutil.Discard, pr)
Mit diesem Ansatz können Sie mühelos Überwachen Sie den Upload-Fortschritt für POST-Anfragen in Go und bieten Sie Benutzern Echtzeit-Einblicke in den Dateiübertragungsprozess.
Das obige ist der detaillierte Inhalt vonWie kann ich den Upload-Fortschritt für POST-Anfragen in Go verfolgen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!