Maison  >  Article  >  développement back-end  >  Comment surveiller la progression du téléchargement pour les requêtes POST dans Go ?

Comment surveiller la progression du téléchargement pour les requêtes POST dans Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-31 22:21:28939parcourir

How to Monitor Upload Progress for POST Requests in Go?

Surveillance de la progression du téléchargement pour les requêtes POST dans Go

Lors de la transmission de fichiers volumineux via des requêtes HTTP POST, le suivi de la progression du téléchargement devient crucial. Dans Go, il existe plusieurs techniques pour obtenir cette fonctionnalité.

Lecteur personnalisé avec suivi de la progression

Une approche consiste à créer un io.Reader personnalisé qui encapsule le lecteur réel . Ce lecteur personnalisé peut ensuite signaler la progression à chaque fois que la méthode Read() est invoqué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>

Dans la fonction principale, instanciez le ProgressReader avec le fichier à télécharger et une fonction de rapport pour afficher la progression.

<code class="go">func main() {
    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)
        }
    }}
    io.Copy(ioutil.Discard, pr)
}</code>

Cette approche offre plus de flexibilité et de contrôle sur la manière dont les progrès sont signalés. De plus, il peut être utilisé pour les sites HTTP et HTTPS.

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:
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