Isu dengan Memuat turun Fail Google Drive Awam dalam Go
Dalam artikel ini, kami berhasrat untuk menangani isu yang dihadapi semasa memuat turun fail zip yang dikongsi secara terbuka daripada Google Drive menggunakan Go. Coretan kod awal, yang disediakan di bawah, mencipta fail kosong bernama "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>
Penyiasatan
Setelah disiasat, didapati isu itu terletak pada cara Go mengambil URL. URL asal yang disediakan, apabila dilawati terus dalam penyemak imbas, mengubah hala ke URL kedua yang mengandungi asterisk (*). Walau bagaimanapun, Go mengekodkan asterisk sebagai *, yang sistem Google tidak mengiktiraf sebagai pembatas yang sah.
Pengenalan Pepijat
Nampaknya pengendalian URL Go menyebabkan isu ini . Menurut spesifikasi skema URI, aksara terpelihara seperti asterisk (*) mesti dikodkan peratus untuk tujuan alternatif. Walaupun Google Drive menjana URL ubah hala dengan betul, pelaksanaan Go mungkin tidak mengendalikan aksara tempah yang dikodkan seperti yang dijangkakan.
Kesimpulan
Isu ini timbul disebabkan oleh potensi pepijat dalam kedua-dua Logik ubah hala Google Drive atau pengendalian URL Go. Siasatan lanjut diperlukan untuk menentukan punca sebenar dan menentukan pihak yang bertanggungjawab. Walau bagaimanapun, penyelesaian yang disediakan dalam penyelesaian yang disediakan membolehkan muat turun fail berjaya dari Google Drive.
Atas ialah kandungan terperinci Mengapa Memuat Turun Fail Google Drive Awam dalam Go Menghasilkan Fail Kosong?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!