Maison > développement back-end > Golang > 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 ?

Patricia Arquette
Libérer: 2024-10-29 17:39:02
original
1034 Les gens l'ont consulté

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 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>
Copier après la connexion

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 := &amp;ProgressReader{file, func(r int64) {
    total += r
    if r > 0 {
        fmt.Println("progress", r)
    } else {
        fmt.Println("done", r)
    }
}}</code>
Copier après la connexion

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>
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal