Maison >développement back-end >Golang >Comment suivre la progression de la demande POST pour les fichiers volumineux dans Go ?

Comment suivre la progression de la demande POST pour les fichiers volumineux dans Go ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-28 14:57:301098parcourir

How to Track POST Request Progress for Large Files in Go?

Suivi de la progression de la demande POST dans Go

Problème :

Développeurs souhaitant créer des applications de partage de fichiers dans Go à l'aide de POST les demandes sont confrontées à des difficultés dans la surveillance de la progression du téléchargement de fichiers volumineux qui nécessitent des temps de téléchargement prolongés.

Solution :

Enveloppé io.Reader avec suivi de la progression :

Au lieu d'exploiter une connexion TCP intermédiaire, une approche alternative consiste à créer un wrapper io.Reader personnalisé autour du lecteur de fichiers réel. Cela permet de suivre la progression à chaque fois que la fonction Read est invoquée.

Implémentation du code :

Voici un exemple d'implémentation :

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

Pour utiliser ce wrapper, enveloppez le lecteur de fichier réel dans le ProgressReader :

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

Par la suite, la progression peut être suivie en copiant le contenu vers un emplacement de suppression :

<code class="go">io.Copy(ioutil.Discard, pr)</code>

Cette méthode permet une surveillance de la progression du téléchargement des fichiers volumineux à l'aide de requêtes POST.

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