首页 > 后端开发 > Golang > 使用 Golang 从 Google Drive 下载公共文件时,为什么会出现空白的'file.zip”?

使用 Golang 从 Google Drive 下载公共文件时,为什么会出现空白的'file.zip”?

Barbara Streisand
发布: 2024-10-28 05:48:30
原创
732 人浏览过

Why am I getting a blank

使用 Golang 从 Google Drive 下载公共文件

问题

尝试使用 Golang 从 Google Drive 下载公共文件的程序员遇到了问题。尽管有共享的公共文件,但当前代码会创建一个空白的“file.zip”。

<code class="go">import (
    "fmt"
    "io"
    "net/http"
    "os"
)

// Main function
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, "-", error)
        return
    }
    defer response.Body.Close()
    n, err := io.Copy(output, response.Body)
    fmt.Println(n, "bytes downloaded")
}</code>
登录后复制

解决方案

经调查,发现该 URL 重定向到另一个 URL包含特殊字符“*”。 Golang 无法正确处理该字符,将其编码为“*”而不是“%2A”,从而导致“403 Forbidden”响应。

解决方案是修改程序以处理该特殊字符正确:

<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>
登录后复制

以上是使用 Golang 从 Google Drive 下载公共文件时,为什么会出现空白的'file.zip”?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板