Maison > Article > développement back-end > Pourquoi est-ce que je reçois un \'file.zip\' vide lorsque je télécharge des fichiers publics depuis Google Drive à l'aide de Golang ?
Les programmeurs qui tentent de télécharger des fichiers publics depuis Google Drive à l'aide de Golang rencontrent des problèmes. Malgré un fichier public partagé, le code actuel entraîne la création d'un "file.zip" vide.
<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>
Après enquête, il a été découvert que l'URL redirige vers une autre URL. contenant un caractère spécial "*". Ce caractère n'est pas géré correctement par Golang, qui l'a codé comme "*" au lieu de "%2A", ce qui a entraîné une réponse "403 Forbidden".
La solution est de modifier le programme pour gérer le caractère spécial correctement :
<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>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!