在 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&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中文网其他相关文章!