Serentak Menghuraikan Fail PDF dan Data JSON daripada Permintaan HTTP Tunggal dalam Go
Apabila mengendalikan permintaan HTTP yang mengandungi data borang berbilang bahagian, ia boleh diperlukan untuk menghuraikan kedua-dua fail dan data JSON daripada permintaan yang sama. Contoh biasa ialah borang di mana pengguna boleh memuat naik dokumen (PDF) dan menyediakan data tambahan (JSON) yang berkaitan dengan fail.
Untuk mencapai ini dalam Go, fungsi r.ParseMultipartForm tidak mencukupi kerana ia hanya menghuraikan data berbilang bahagian. Untuk mengendalikan kedua-dua fail dan data JSON secara berasingan, fungsi r.MultipartReader diperlukan.
Penyelesaian:
Fungsi r.MultipartReader mengembalikan objek berbilang bahagian.Reader yang membenarkan lelaran pada setiap bahagian data bentuk berbilang bahagian menggunakan fungsi r.NextPart. Ini membolehkan kami memproses setiap bahagian secara individu, membezakan antara bahagian fail dan bahagian JSON.
Berikut ialah versi terkini fungsi pengendali:
<code class="go">func (s *Server) PostFileHandler(w http.ResponseWriter, r *http.Request) { mr, err := r.MultipartReader() if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } doc := Doc{} for { part, err := mr.NextPart() if err == io.EOF { break } if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } if part.FormName() == "file" { doc.Url = part.FileName() outfile, err := os.Create("./docs/" + part.FileName()) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } defer outfile.Close() _, err = io.Copy(outfile, part) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } } if part.FormName() == "doc" { jsonDecoder := json.NewDecoder(part) err = jsonDecoder.Decode(&doc) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return }</code>
Atas ialah kandungan terperinci Bagaimana Menghuraikan Kedua-dua Fail PDF dan Data JSON daripada Permintaan HTTP Tunggal dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!