Maison >développement back-end >Golang >Comment suivre la progression du téléchargement pour les requêtes POST dans Go ?
Réalisation du suivi de la progression du téléchargement pour les requêtes POST dans Go
Dans la quête visant à créer un clone ShareX pour Linux qui télécharge des fichiers de manière transparente via HTTP POST requêtes, une question cruciale se pose : comment suivre efficacement la progression du téléchargement, en particulier pour les fichiers plus volumineux dont le transfert peut prendre quelques minutes ?
Bien que l'établissement manuel d'une connexion TCP et l'envoi de requêtes HTTP par morceaux soient une solution viable, elle comporte limites lorsqu'il s'agit de sites HTTPS et n'est peut-être pas l'approche la plus efficace. Heureusement, Go propose une alternative qui intègre sans effort le suivi des progrès dans votre processus de demande.
Personnalisation de io.Reader pour le suivi des progrès
L'idée clé réside dans la création d'un io personnalisé .Reader qui enveloppe le lecteur réel. En remplaçant la méthode Read(), vous pouvez capturer la progression à chaque invocation Read.
Considérez l'extrait de code suivant :
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 }
Dans cette structure, Reporter est une fonction de rappel qui reçoit le nombre d'octets lus comme argument. Le ProgressReader intercepte ensuite l'opération Read et rapporte la progression au rappel.
Mise en œuvre en pratique
Pour mettre ce concept en pratique, vous peut utiliser les étapes suivantes :
Créez une instance de ProgressReader, en encapsulant votre lecteur de fichiers :
file, _ := os.Open("/tmp/blah.go") pr := &ProgressReader{file, func(r int64) { ... }}
Définissez la fonction Reporter à gérer mises à jour de progression :
pr.Reporter = func(r int64) { total += r if r > 0 { fmt.Println("progress", r) } else { fmt.Println("done", r) } }
Effectuez la copie du fichier à l'aide de votre lecteur personnalisé :
io.Copy(ioutil.Discard, pr)
En utilisant cette approche, vous pouvez facilement surveillez la progression du téléchargement pour les requêtes POST dans Go, fournissant aux utilisateurs des informations en temps réel sur le processus de transfert de fichiers.
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!