문제:
POST를 사용하여 Go에서 파일 공유 애플리케이션을 구축하려는 개발자 요청은 확장된 업로드 시간이 필요한 대용량 파일의 업로드 진행 상황을 모니터링하는 데 어려움을 겪습니다.
해결책:
진행 추적 기능이 포함된 래핑된 io.Reader:
중간 TCP 연결을 활용하는 대신 실제 파일 판독기 주위에 사용자 정의 io.Reader 래퍼를 만드는 대체 접근 방식이 있습니다. 이를 통해 읽기 기능이 호출될 때마다 진행 상황을 추적할 수 있습니다.
코드 구현:
다음은 구현 예입니다.
<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!