Go의 HTTP 요청에서 파일 및 JSON 구문 분석
AngularJS 프런트 엔드에서 HTTP 요청을 생성할 때 다음이 필요할 수 있습니다. 파일과 JSON 데이터를 모두 구문 분석합니다. 이는 특히 요청 본문에서 JSON 데이터를 구문 분석하려고 할 때 어려울 수 있습니다.
다음 HTTP 요청 페이로드를 고려하세요.
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}
이 시나리오에서 "파일"은 PDF를 나타냅니다. document, "doc"에는 구문 분석하려는 JSON 데이터가 포함되어 있습니다.
파일과 JSON 데이터를 모두 효과적으로 구문 분석하기 위해 Go는 적합한 솔루션을 제공합니다. 이를 달성하는 방법은 다음과 같습니다.
r.Body에 JSON 데이터가 포함되어 있다고 가정하는 대신 r.MultipartReader()를 활용하여 PDF와 JSON 부분을 모두 별도로 처리해야 합니다. 이 함수는 r.NextPart()를 사용하여 요청의 여러 부분을 반복할 수 있는 mime/multipart.Reader 개체를 제공합니다.
수정된 핸들러 함수의 예는 다음과 같습니다.
<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>
위 내용은 Go의 HTTP 요청에서 파일과 JSON을 구문 분석하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!