Heim  >  Artikel  >  Backend-Entwicklung  >  Warum erhalte ich eine leere Datei „file.zip', wenn ich mit Golang öffentliche Dateien von Google Drive herunterlade?

Warum erhalte ich eine leere Datei „file.zip', wenn ich mit Golang öffentliche Dateien von Google Drive herunterlade?

Barbara Streisand
Barbara StreisandOriginal
2024-10-28 05:48:30716Durchsuche

Why am I getting a blank

Öffentliche Dateien von Google Drive mit Golang herunterladen

Problem

Programmierer, die versuchen, öffentliche Dateien mit Golang von Google Drive herunterzuladen, stoßen auf Probleme. Obwohl es eine gemeinsame öffentliche Datei gibt, führt der aktuelle Code dazu, dass eine leere Datei „file.zip“ erstellt wird.

<code class="go">import (
    "fmt"
    "io"
    "net/http"
    "os"
)

// Main function
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, "-", error)
        return
    }
    defer response.Body.Close()
    n, err := io.Copy(output, response.Body)
    fmt.Println(n, "bytes downloaded")
}</code>

Lösung

Bei der Untersuchung wurde festgestellt, dass die URL auf eine andere URL umleitet enthält ein Sonderzeichen „*“. Dieses Zeichen wird von Golang nicht korrekt verarbeitet, da es als „*“ anstelle von „%2A“ codiert wurde, was zu einer „403 Forbidden“-Antwort führte.

Die Lösung besteht darin, das Programm so zu ändern, dass es mit dem Sonderzeichen umgeht richtig:

<code class="go">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()

url = strings.Replace(url, "%2A", "%252A", -1) // Replace * with its percent-encoded form

response, err := http.Get(url)</code>

Das obige ist der detaillierte Inhalt vonWarum erhalte ich eine leere Datei „file.zip', wenn ich mit Golang öffentliche Dateien von Google Drive herunterlade?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn