首页  >  文章  >  后端开发  >  如何在 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