Go を使用した HTTP リクエストからのファイルと JSON データの同時解析
このシナリオでは、PDF ドキュメントと JSON の両方を解析することを目的としています。マルチパート HTTP リクエスト フォームからのデータ。この複雑さは、1 つのリクエスト内で 2 つの異なる部分を処理する必要があることから発生します。
この状況を効率的に処理するには、Go の http.(*Request).MultipartReader() メソッドの利用を検討してください。このメソッドは mime/multipart.Reader オブジェクトを返します。これにより、r.NextPart() 関数を使用してリクエストの個々の部分を反復処理できるようになります。
このメソッドを組み込むようにハンドラー関数を修正すると、次のようになります。 :
<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() // This is OK, no more parts if err == io.EOF { break } // Some error if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } // PDF 'file' part if part.FormName() == "file" { doc.Url = part.FileName() fmt.Println("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 で複数のリクエスト パーツを処理する方法 (PDF および JSON)?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。