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
Libérer: 2024-10-28 14:57:30
original
1208 Les gens l'ont consulté

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

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

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

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