Home > Backend Development > Golang > How to Track Upload Progress in Go HTTP POST Requests: A Practical Guide Using ProgressReader?

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

Patricia Arquette
Release: 2024-10-29 17:39:02
Original
974 people have browsed it

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

How to Track Upload Progress in Go HTTP POST Requests

In the development of a ShareX clone for Linux using Go, there's a need to monitor the progress of large file uploads sent via HTTP POST requests. While manually opening a TCP connection and writing HTTP requests in chunks is an option, it's not the most efficient and reliable solution.

ProgressReader: A Custom io.Reader

A more effective approach involves creating a custom io.Reader to wrap around the actual reader. This custom reader, called ProgressReader, has a Reporter function that outputs the upload progress each time the Read method is called, providing real-time monitoring.

Here's an example of how to implement this idea:

<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>
Copy after login

This custom reader is then used to wrap the file being uploaded:

<code class="go">file, _ := os.Open("/tmp/blah.go")
total := int64(0)
pr := &amp;ProgressReader{file, func(r int64) {
    total += r
    if r > 0 {
        fmt.Println("progress", r)
    } else {
        fmt.Println("done", r)
    }
}}</code>
Copy after login

Finally, the data is copied using io.Copy to ioutil.Discard, which acts as a sink for the data while still allowing the progress output to be printed.

<code class="go">io.Copy(ioutil.Discard, pr)</code>
Copy after login

This method provides a simple and reliable way to track upload progress for HTTP POST requests in Go, enabling users to monitor the progress of large file uploads in real-time.

The above is the detailed content of How to Track Upload Progress in Go HTTP POST Requests: A Practical Guide Using ProgressReader?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template