Go で単一の HTTP リクエストから PDF ファイルと JSON データを同時に解析する
マルチパート フォーム データを含む HTTP リクエストを処理する場合、同じリクエストからのファイルと JSON データの両方を解析する必要があります。一般的な例は、ユーザーがドキュメント (PDF) をアップロードし、そのファイルに関連する追加データ (JSON) を提供できるフォームです。
Go でこれを実現するには、r.ParseMultipartForm 関数は解析するだけなので不十分です。マルチパートデータ。ファイルと JSON データの両方を個別に処理するには、r.MultipartReader 関数が必要です。
解決策:
r.MultipartReader 関数は、次の multipart.Reader オブジェクトを返します。 r.NextPart 関数を使用して、マルチパート フォーム データの各部分を反復処理できます。これにより、ファイル部分と JSON 部分を区別して、各部分を個別に処理できるようになります。
ハンドラー関数の更新バージョンは次のとおりです。
<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>
以上がGo で単一の HTTP リクエストから PDF ファイルと JSON データの両方を解析する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。