Maison >développement back-end >Golang >Comment suivre la progression de la demande POST pour les fichiers volumineux 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!