> 백엔드 개발 > Golang > Go HTTP POST 요청에서 업로드 진행 상황을 추적하는 방법: ProgressReader를 사용한 실용 가이드?

Go HTTP POST 요청에서 업로드 진행 상황을 추적하는 방법: ProgressReader를 사용한 실용 가이드?

Patricia Arquette
풀어 주다: 2024-10-29 17:39:02
원래의
944명이 탐색했습니다.

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

Go HTTP POST 요청에서 업로드 진행 상황을 추적하는 방법

Go를 사용하여 Linux용 ShareX 복제본을 개발할 때 다음이 필요합니다. HTTP POST 요청을 통해 전송된 대용량 파일 업로드의 진행 상황을 모니터링합니다. 수동으로 TCP 연결을 열고 HTTP 요청을 청크로 작성하는 것은 옵션이지만 가장 효율적이고 안정적인 솔루션은 아닙니다.

ProgressReader: 맞춤형 io.Reader

보다 효과적인 접근 방식은 실제 판독기를 둘러싸는 사용자 정의 io.Reader를 만드는 것입니다. ProgressReader라고 하는 이 사용자 정의 리더에는 Read 메서드가 호출될 때마다 업로드 진행 상황을 출력하여 실시간 모니터링을 제공하는 Reporter 기능이 있습니다.

이 아이디어를 구현하는 방법의 예는 다음과 같습니다.

<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>
로그인 후 복사

이 사용자 정의 리더는 업로드되는 파일을 래핑하는 데 사용됩니다.

<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>
로그인 후 복사

마지막으로 데이터는 io.Copy를 사용하여 데이터 싱크 역할을 하는 ioutil.Discard에 복사됩니다. 진행 상황 출력은 계속 인쇄할 수 있습니다.

<code class="go">io.Copy(ioutil.Discard, pr)</code>
로그인 후 복사

이 방법은 Go에서 HTTP POST 요청에 대한 업로드 진행 상황을 추적하는 간단하고 안정적인 방법을 제공하여 사용자가 대용량 파일 업로드 진행 상황을 실시간으로 모니터링할 수 있도록 합니다. -시간.

위 내용은 Go HTTP POST 요청에서 업로드 진행 상황을 추적하는 방법: ProgressReader를 사용한 실용 가이드?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿