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!