Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich den Upload-Fortschritt für POST-Anfragen in Go verfolgen?

Wie kann ich den Upload-Fortschritt für POST-Anfragen in Go verfolgen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-30 22:11:03514Durchsuche

 How to Track Upload Progress for POST Requests in Go?

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:

  1. Erstellen Sie eine Instanz von ProgressReader und umschließen Sie Ihren Dateireader:

    file, _ := os.Open("/tmp/blah.go")
    pr := &ProgressReader{file, func(r int64) { ... }}
  2. 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)
        }
    }
  3. 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!

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