Heim > Artikel > Backend-Entwicklung > Warum erhalte ich eine leere Datei „file.zip', wenn ich mit Golang öffentliche Dateien von Google Drive herunterlade?
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&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>
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!