ホームページ > バックエンド開発 > Golang > Golang で Google ドライブからパブリック ファイルをダウンロードする方法: ZIP ファイルが空なのはなぜですか?

Golang で Google ドライブからパブリック ファイルをダウンロードする方法: ZIP ファイルが空なのはなぜですか?

Patricia Arquette
リリース: 2024-11-01 12:02:02
オリジナル
601 人が閲覧しました

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>
ログイン後にコピー

ただし、このコードは「file.zip」という名前の空のファイルを作成するだけです。 Google ドライブから zip ファイルをダウンロードする代わりに。

問題

さらに調査したところ、Google ドライブは最初のダウンロード URL を、パスにアスタリスク文字 () が含まれる 2 番目の URL にリダイレクトしていることが判明しました。残念ながら、Go HTTP クライアントはアスタリスクを に解決せずに "*" としてエンコードし、その結果、Google ドライブから "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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート