問題:
旨在使用POST 在Go 中建立檔案共享應用程式的開發人員請求在監控需要延長上傳時間的大檔案的上傳進度方面面臨挑戰。
解決方案:
有進度追蹤的包裝io.Reader:
另一種方法是圍繞實際檔案讀取器建立自訂io.Reader 包裝器,而不是利用中間TCP 連線。這樣可以在每次呼叫 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>
使用這個包裝器,將實際的檔案讀取器包裝在ProgressReader 中:
<code class="go">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) } }}</code>
隨後,可以透過將內容複製到丟棄位置來追蹤進度:
<code class="go">io.Copy(ioutil.Discard, pr)</code>
此方法可以實現無縫使用POST 請求監控大檔案的上傳進度。
以上是如何在 Go 中追蹤大檔案的 POST 請求進度?的詳細內容。更多資訊請關注PHP中文網其他相關文章!