Web アプリケーションでは、HTTP リクエストでファイルと JSON データの両方を受信するのが一般的です。これらの要素を正常に処理するには、要素を効果的に解析する方法を理解することが不可欠です。
Go バックエンドにリクエストを送信する AngularJS フロントエンドがあるシナリオを考えてみましょう。リクエストにはファイル (「file」) と JSON データ (「doc」) が含まれます。目標は、このリクエストの PDF ファイルと JSON データの両方を解析することです。
この問題を解決するには、ファイルと JSON データの両方を個別に処理する必要があります。 http.(*Request).MultipartReader() を利用し、NextPart() を使用してパーツを反復処理することで、各要素を抽出して解析できます。
mr, err := r.MultipartReader()
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
マルチパート リクエストの各パートについて:
part, err := mr.NextPart()
if err == io.EOF {
break
}
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
パーツがファイルの場合 (part.FormName() == "file"):
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 データが含まれている場合 (part.FormName() == "doc"):
jsonDecoder := json.NewDecoder(part)
err = jsonDecoder.Decode(&doc)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
ファイルと JSON データの両方を解析した後、データベースへの保存やクライアントへの応答の送信など、必要な後処理を実行できます。 .
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3