Rumah >pembangunan bahagian belakang >Golang >Cara Menghuraikan Fail dan JSON daripada Permintaan HTTP dalam Go
Menghuraikan Fail dan JSON daripada Permintaan HTTP dalam Go
Apabila membina permintaan HTTP daripada bahagian hadapan AngularJS, anda mungkin menghadapi keperluan untuk menghuraikan kedua-dua fail dan data JSON. Ini mungkin mencabar, terutamanya apabila cuba menghuraikan data JSON daripada badan permintaan.
Pertimbangkan muatan permintaan HTTP berikut:
Content-Disposition: form-data; name="file"; filename="Parent Handbook.pdf" Content-Type: application/pdf Content-Disposition: form-data; name="doc" {"title":"test","cat":"test cat","date":20142323}
Dalam senario ini, "fail" mewakili PDF dokumen, manakala "doc" mengandungi data JSON yang ingin anda huraikan.
Untuk menghuraikan kedua-dua fail dan data JSON dengan berkesan, Go menyediakan penyelesaian yang sesuai. Begini cara anda boleh mencapai ini:
Daripada menganggap bahawa r.Body mengandungi data JSON, anda harus menggunakan r.MultipartReader() untuk memproses kedua-dua bahagian PDF dan JSON secara berasingan. Fungsi ini menyediakan objek mime/multipart.Reader yang membolehkan anda mengulangi bahagian permintaan yang berlainan menggunakan r.NextPart().
Berikut ialah contoh fungsi pengendali yang disemak:
<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() // No more parts if err == io.EOF { break } // Error occurred if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } // PDF 'file' part 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 } } // JSON 'doc' part 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 Cara Menghuraikan Fail dan JSON daripada Permintaan HTTP dalam Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!