在 Go 中监控 POST 请求的上传进度
通过 HTTP POST 请求传输大文件时,跟踪上传进度变得至关重要。在 Go 中,有多种技术可以实现此功能。
具有进度跟踪的自定义阅读器
一种方法是创建一个封装实际阅读器的自定义 io.Reader 。然后,每次调用 Read() 方法时,这个自定义阅读器都可以报告进度。
<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>
在 main 函数中,使用要上传的文件实例化 ProgressReader 和用于输出进度的报告器函数。
<code class="go">func main() { 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) } }} io.Copy(ioutil.Discard, pr) }</code>
这种方法提供了更大的灵活性和对如何报告进度的控制。此外,它还可用于 HTTP 和 HTTPS 站点。
以上是如何在 Go 中监控 POST 请求的上传进度?的详细内容。更多信息请关注PHP中文网其他相关文章!