Go에서 대용량 파일에 대한 POST 요청 진행 상황을 추적하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-10-28 14:57:30
원래의
995명이 탐색했습니다.

How to Track POST Request Progress for Large Files in Go?

Go에서 POST 요청 진행 상황 추적

문제:

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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