首頁  >  文章  >  後端開發  >  如何在 Golang 中從 Google Drive 下載公共文件:為什麼我的 Zip 檔案是空的?

如何在 Golang 中從 Google Drive 下載公共文件:為什麼我的 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 Drive 下載公用檔案

在本文中,我們將探討如何從Google 下載公開分享的zip 檔案使用Golang 進行驅動。

問題陳述

考慮以下嘗試從Google Drive 下載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 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 Drive 下載 zip 檔案。

以上是如何在 Golang 中從 Google Drive 下載公共文件:為什麼我的 Zip 檔案是空的?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn