"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como rastrear o progresso do upload em solicitações Go HTTP POST: um guia prático usando o ProgressReader?

Como rastrear o progresso do upload em solicitações Go HTTP POST: um guia prático usando o ProgressReader?

Publicado em 2024-11-04
Navegar:388

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

Como rastrear o progresso do upload em solicitações HTTP POST Go

No desenvolvimento de um clone do ShareX para Linux usando Go, é necessário monitore o progresso de uploads de arquivos grandes enviados por meio de solicitações HTTP POST. Embora abrir manualmente uma conexão TCP e escrever solicitações HTTP em pedaços seja uma opção, não é a solução mais eficiente e confiável.

ProgressReader: A Custom io.Reader

Uma abordagem mais eficaz envolve a criação de um io.Reader personalizado para envolver o leitor real. Esse leitor personalizado, chamado ProgressReader, possui uma função Reporter que exibe o progresso do upload cada vez que o método Read é chamado, fornecendo monitoramento em tempo real.

Aqui está um exemplo de como implementar essa ideia:

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 leitor personalizado é então usado para agrupar o arquivo que está sendo carregado:

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, os dados são copiados usando io.Copy para ioutil.Discard, que atua como um coletor para os dados enquanto ainda permite que a saída do progresso seja impressa.

io.Copy(ioutil.Discard, pr)

Este método fornece uma maneira simples e confiável de rastrear o progresso do upload para solicitações HTTP POST no Go, permitindo que os usuários monitorem o progresso de uploads de arquivos grandes em tempo real.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3