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 affiche 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 :
<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>
Ce lecteur personnalisé est ensuite utilisé pour envelopper le fichier en cours de téléchargement :
<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>
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.
<code class="go">io.Copy(ioutil.Discard, pr)</code>
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. -heure.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!