首页  >  文章  >  后端开发  >  为什么在 Go 中下载公共 Google Drive 文件会导致文件为空?

为什么在 Go 中下载公共 Google Drive 文件会导致文件为空?

DDD
DDD原创
2024-10-29 01:19:02927浏览

Why Does Downloading Public Google Drive Files in Go Result in an Empty File?

在 Go 中下载公共 Google Drive 文件的问题

在本文中,我们旨在解决下载公开共享的 zip 文件时遇到的问题使用 Go 从 Google Drive 获取。下面提供的初始代码片段创建一个名为“file.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>

调查

经调查,发现该问题关键在于 Go 如何获取 URL。当直接在浏览器中访问时,提供的原始 URL 会重定向到包含星号 (*) 的第二个 URL。但是,Go 将星号编码为 *,Google 的系统无法将其识别为有效的分隔符。

错误识别

看来 Go 的 URL 处理导致了该问题。根据 URI 方案规范,星号 (*) 等保留字符必须进行百分比编码以用于其他目的。虽然 Google Drive 正确生成了重定向 URL,但 Go 的实现可能无法按预期处理编码的保留字符。

结论

该问题的出现是由于以下任一方面的潜在错误造成的: Google Drive 的重定向逻辑或 Go 的 URL 处理。需要进一步调查以确定具体原因并查明责任方。但是,所提供的解决方案中提供的解决方法允许从 Google 云端硬盘成功下载文件。

以上是为什么在 Go 中下载公共 Google Drive 文件会导致文件为空?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn