>  기사  >  백엔드 개발  >  Golang의 Google 드라이브에서 공개 파일을 다운로드하는 방법: 내 Zip 파일이 비어 있는 이유는 무엇입니까?

Golang의 Google 드라이브에서 공개 파일을 다운로드하는 방법: 내 Zip 파일이 비어 있는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-01 12:02:02495검색

How to Download Public Files from Google Drive in Golang: Why Is My Zip File Empty?

Golang의 Google 드라이브에서 공개 파일 다운로드

이 기사에서는 Google에서 공개적으로 공유된 zip 파일을 다운로드하는 방법을 살펴보겠습니다. Golang을 사용하여 드라이브.

문제 설명

Google 드라이브에서 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>

그러나 , 이 코드는 Google Drive에서 zip 파일을 다운로드하는 대신 "file.zip"이라는 빈 파일만 생성합니다.

문제 해결

추가 조사 결과, Google Drive가 초기 다운로드 URL을 경로에 별표 문자()가 있는 두 번째 URL로 리디렉션하는 것으로 나타났습니다. 불행하게도 Go HTTP 클라이언트는 별표를 로 해결하는 대신 "*"로 인코딩하여 Google Drive에서 "403 Forbidden" 응답을 반환합니다.

해결책

이 문제를 해결하려면 URL을 수동으로 조작하여 별표 문자를 제거하고 RFC 3986에 따라 올바르게 인코딩하면 됩니다. 수정된 코드 조각은 다음과 같습니다.

<code class="go">package main

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

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

    // Replace the %2A with the asterisk character
    url = strings.Replace(url, "%2A", "*", -1)

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

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

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

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

수동으로 교체하여 별표 문자가 있는 "*" 코드는 Google 드라이브에서 zip 파일을 성공적으로 다운로드합니다.

위 내용은 Golang의 Google 드라이브에서 공개 파일을 다운로드하는 방법: 내 Zip 파일이 비어 있는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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