Muat naik Fail dengan Permintaan POST dalam Go
Memuat naik fail melalui permintaan POST ialah tugas biasa semasa membangunkan aplikasi web. Ini menjadi lebih penting apabila bekerja dengan bot Telegram, yang memerlukan fail dimuat naik sebagai sebahagian daripada panggilan API.
Malangnya, menggunakan fungsi http.Post yang mudah boleh mengakibatkan ralat seperti "Permintaan Buruk: tiada gambar dalam permintaan." Untuk menyelesaikan isu ini, anda perlu menghantar fail menggunakan jenis kandungan multipart/form-data. Begini cara anda boleh mencapainya:
Buat Struktur Kandungan:
Tentukan struct kandungan untuk mewakili metadata dan data fail:
<code class="go">type content struct { fname string ftype string fdata []byte }</code>
Borang Berbilang Bahagian Pembina:
Gunakan multipart.NewWriter untuk mencipta pembina borang berbilang bahagian baharu:
<code class="go">var buf = new(bytes.Buffer) var w multipart.NewWriter(buf)</code>
Tambah Data Fail:
Lelaran pada fail yang anda perlu muat naik dan buat bahagian borang untuk setiap satu satu:
<code class="go">for _, f := range files { part, err := w.CreateFormFile(f.ftype, filepath.Base(f.fname)) if err != nil { return []byte{}, err } _, err = part.Write(f.fdata) if err != nil { return []byte{}, err } }</code>
Tutup Borang:
Setelah anda menambah semua fail, tutup pembina borang berbilang bahagian:
<code class="go">err := w.Close() if err != nil { return []byte{}, err }</code>
Buat HTTP Permintaan:
Buat permintaan HTTP baharu menggunakan http.Permintaan Baharu:
<code class="go">req, err := http.NewRequest("POST", url, buf) if err != nil { return []byte{}, err }</code>
Tetapkan Jenis Kandungan:
Tetapkan pengepala Jenis Kandungan untuk menunjukkan bahawa anda sedang menghantar multipart/form-data:
<code class="go">req.Header.Add("Content-Type", w.FormDataContentType())</code>
Hantar Permintaan:
Hantar permintaan HTTP menggunakan klien HTTP:
<code class="go">client := &http.Client{} res, err := client.Do(req) if err != nil { return []byte{}, err }</code>
Baca Respons:
Baca badan respons:
<code class="go">cnt, err := io.ReadAll(res.Body) if err != nil { return []byte{}, err }</code>
Dengan mengikuti langkah ini, anda boleh berjaya memuat naik fail dengan permintaan POST dalam Go, termasuk semasa bekerja dengan bot Telegram.
Atas ialah kandungan terperinci Bagaimana untuk Memuat naik Fail dengan Permintaan POST dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!