>  기사  >  백엔드 개발  >  Go에서 공개 Google 드라이브 파일을 다운로드하면 빈 파일이 생성되는 이유는 무엇입니까?

Go에서 공개 Google 드라이브 파일을 다운로드하면 빈 파일이 생성되는 이유는 무엇입니까?

DDD
DDD원래의
2024-10-29 01:19:02927검색

Why Does Downloading Public Google Drive Files in Go Result in an Empty File?

Go에서 공개 Google 드라이브 파일을 다운로드할 때 발생하는 문제

이 문서에서는 공개적으로 공유된 zip 파일을 다운로드할 때 발생하는 문제를 해결하는 것을 목표로 합니다. Go를 사용하여 Google 드라이브에서. 아래 제공된 초기 코드 조각은 "file.zip"이라는 빈 파일을 생성합니다.

<code class="go">package main

import (
    "fmt"
    "io"
    "net/http"
    "os"
)

func main() {
    url := "https://docs.google.com/uc?export=download&amp;id=0B2Q7X-dUtUBebElySVh1ZS1iaTQ"
    fileName := "file.zip"
    fmt.Println("Downloading file...")

    output, err := os.Create(fileName)
    defer output.Close()

    response, err := http.Get(url)
    if err != nil {
        fmt.Println("Error while downloading", url, "-", eerrror)
        return
    }
    defer response.Body.Close()

    n, err := io.Copy(output, response.Body)

    fmt.Println(n, "bytes downloaded")
}</code>

조사

조사 결과 문제가 발견되었습니다. Go가 URL을 가져오는 방법에 있습니다. 제공된 원래 URL을 브라우저에서 직접 방문하면 별표(*)가 포함된 두 번째 URL로 리디렉션됩니다. 그러나 Go는 별표를 *로 인코딩하는데, 이는 Google 시스템에서 유효한 구분 기호로 인식하지 못합니다.

버그 식별

Go의 URL 처리가 문제를 일으키는 것으로 보입니다. . URI 체계 사양에 따라 별표(*)와 같은 예약된 문자는 대체 목적으로 백분율로 인코딩되어야 합니다. Google Drive는 리디렉션 URL을 올바르게 생성하지만 Go의 구현은 인코딩된 예약 문자를 예상대로 처리하지 못할 수 있습니다.

결론

이 문제는 두 가지 모두에서 잠재적인 버그로 인해 발생합니다. Google Drive의 리디렉션 논리 또는 Go의 URL 처리. 정확한 원인을 파악하고 책임자를 특정하려면 추가 조사가 필요하다. 그러나 제공된 솔루션에서 제공하는 해결 방법을 사용하면 Google Drive에서 파일을 성공적으로 다운로드할 수 있습니다.

위 내용은 Go에서 공개 Google 드라이브 파일을 다운로드하면 빈 파일이 생성되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.