"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment suivre la progression du téléchargement dans les requêtes Go HTTP POST : un guide pratique utilisant ProgressReader ?

Comment suivre la progression du téléchargement dans les requêtes Go HTTP POST : un guide pratique utilisant ProgressReader ?

Publié le 2024-11-04
Parcourir:453

How to Track Upload Progress in Go HTTP POST Requests: A Practical Guide Using ProgressReader?

Comment suivre la progression du téléchargement dans les requêtes HTTP POST Go

Dans le développement d'un clone ShareX pour Linux utilisant Go, il est nécessaire de surveiller la progression des téléchargements de fichiers volumineux envoyés via des requêtes HTTP POST. Bien que l'ouverture manuelle d'une connexion TCP et l'écriture de requêtes HTTP en morceaux soient une option, ce n'est pas la solution la plus efficace et la plus fiable.

ProgressReader : un io.Reader personnalisé

Une approche plus efficace consiste à créer un io.Reader personnalisé pour envelopper le lecteur réel. Ce lecteur personnalisé, appelé ProgressReader, dispose d'une fonction Reporter qui génère la progression du téléchargement à chaque appel de la méthode Read, offrant ainsi une surveillance en temps réel.

Voici un exemple de mise en œuvre de cette idée :

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
}

Ce lecteur personnalisé est ensuite utilisé pour envelopper le fichier en cours de téléchargement :

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)
    }
}}

Enfin, les données sont copiées à l'aide de io.Copy vers ioutil.Discard, qui agit comme un récepteur pour les données tout en permettant d'imprimer la progression.

io.Copy(ioutil.Discard, pr)

Cette méthode fournit un moyen simple et fiable de suivre la progression du téléchargement des requêtes HTTP POST dans Go, permettant aux utilisateurs de surveiller la progression des téléchargements de fichiers volumineux en temps réel.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3