"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo realizar un seguimiento del progreso de la carga en solicitudes POST HTTP de Go: una guía práctica con ProgressReader?

¿Cómo realizar un seguimiento del progreso de la carga en solicitudes POST HTTP de Go: una guía práctica con ProgressReader?

Publicado el 2024-11-04
Navegar:213

How to Track Upload Progress in Go HTTP POST Requests: A Practical Guide Using ProgressReader?

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.

Último tutorial Más>

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