ホームページ  >  記事  >  バックエンド開発  >  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 は、ブラウザーで直接アクセスすると、アスタリスク (*) を含む 2 番目の URL にリダイレクトされます。ただし、Go はアスタリスクを * としてエンコードします。これは Google のシステムでは有効な区切り文字として認識されません。

バグの特定

Go の URL 処理が問題の原因となっているようです。 URI スキームの仕様によれば、アスタリスク (*) などの予約文字は、代替目的のためにパーセント エンコードする必要があります。 Google ドライブはリダイレクト URL を正しく生成しますが、Go の実装ではエンコードされた予約文字が期待どおりに処理されない可能性があります。

結論

この問題は、いずれかの潜在的なバグにより発生します。 Google ドライブのリダイレクト ロジックまたは Go の URL 処理。正確な原因を特定し、責任者を特定するには、さらなる調査が必要です。ただし、提供されているソリューションで提供されている回避策を使用すると、Google ドライブからファイルを正常にダウンロードできます。

以上がGo で公開 Google ドライブ ファイルをダウンロードすると空のファイルになるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。