Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara Muat Turun Fail Awam dari Google Drive di Golang: Mengapa Fail Zip Saya Kosong?

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

Patricia Arquette
Patricia Arquetteasal
2024-11-01 12:02:02495semak imbas

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>

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>

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!

Kenyataan:
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