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&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 サイトの他の関連記事を参照してください。