Cara Muat Turun Fail Awam dari Google Drive di Golang: Mengapa Fail Zip Saya Kosong?

Patricia Arquette
Lepaskan: 2024-11-01 12:02:02
asal
506 orang telah melayarinya

How to Download Public Files from Google Drive in Golang: Why Is My Zip File Empty?

Memuat turun Fail Awam daripada Google Drive di Golang

Dalam artikel ini, kami akan meneroka cara memuat turun fail zip yang dikongsi secara terbuka daripada Google Pandu menggunakan Golang.

Pernyataan Masalah

Pertimbangkan coretan kod berikut yang cuba memuat turun fail zip daripada Google Drive:

<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>
Salin selepas log masuk

Walau bagaimanapun , kod ini hanya mencipta fail kosong bernama "file.zip" dan bukannya memuat turun fail zip daripada Google Drive.

Menyelesaikan Masalah

Setelah siasatan lanjut, ia didapati bahawa Google Drive mengubah hala URL muat turun awal ke URL kedua dengan aksara asterisk () dalam laluannya. Malangnya, klien HTTP Go mengekodkan asterisk sebagai "*" dan bukannya menyelesaikannya kepada , menghasilkan respons "403 Dilarang" daripada Google Drive.

Penyelesaian

Untuk menyelesaikan isu ini, anda boleh memanipulasi URL secara manual untuk mengalih keluar aksara asterisk dan mengekodnya dengan betul mengikut RFC 3986. Coretan kod yang diubah suai akan kelihatan seperti ini:

<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>
Salin selepas log masuk

Dengan menggantikan secara manual "*" dengan aksara asterisk, kod tersebut berjaya memuat turun fail zip daripada Google Drive.

Atas ialah kandungan terperinci Cara Muat Turun Fail Awam dari Google Drive di Golang: Mengapa Fail Zip Saya Kosong?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!