Cómo realizar un seguimiento del progreso de la carga en solicitudes POST HTTP de Go
En el desarrollo de un clon de ShareX para Linux usando Go, es necesario Supervise el progreso de las cargas de archivos grandes enviadas a través de solicitudes HTTP POST. Si bien abrir manualmente una conexión TCP y escribir solicitudes HTTP en fragmentos es una opción, no es la solución más eficiente y confiable.
ProgressReader: un io.Reader personalizado
Un enfoque más eficaz implica la creación de un io.Reader personalizado que se adapte al lector real. Este lector personalizado, llamado ProgressReader, tiene una función Reporter que genera el progreso de la carga cada vez que se llama al método Read, proporcionando monitoreo en tiempo real.
Aquí hay un ejemplo de cómo implementar esta idea:
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
}
Este lector personalizado se utiliza para empaquetar el archivo que se está cargando:
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)
}
}}
Finalmente, los datos se copian usando io.Copy to ioutil.Discard, que actúa como un receptor de datos y al mismo tiempo permite imprimir el resultado del progreso.
io.Copy(ioutil.Discard, pr)
Este método proporciona una manera simple y confiable de rastrear el progreso de la carga de solicitudes HTTP POST en Go, lo que permite a los usuarios monitorear el progreso de la carga de archivos grandes en tiempo real.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3