ホームページ  >  記事  >  バックエンド開発  >  Golang で HTTP リクエストからファイルと JSON データを解析するにはどうすればよいですか?

Golang で HTTP リクエストからファイルと JSON データを解析するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-24 17:06:02785ブラウズ

How to Parse Files and JSON Data from an HTTP Request in Golang?

Go での HTTP リクエストからのファイルと JSON データの解析

Web アプリケーションでは、HTTP リクエストでファイルと JSON データの両方を受信するのが一般的です。これらの要素を正常に処理するには、要素を効果的に解析する方法を理解することが不可欠です。

問題

Go バックエンドにリクエストを送信する AngularJS フロントエンドがあるシナリオを考えてみましょう。リクエストにはファイル (「file」) と JSON データ (「doc」) が含まれます。目標は、このリクエストの PDF ファイルと JSON データの両方を解析することです。

解決策

この問題を解決するには、ファイルと JSON データの両方を個別に処理する必要があります。 http.(*Request).MultipartReader() を利用し、NextPart() を使用してパーツを反復処理することで、各要素を抽出して解析できます。

ステップ 1: マルチパート リーダーを作成する

<code class="go">mr, err := r.MultipartReader()
if err != nil {
    http.Error(w, err.Error(), http.StatusInternalServerError)
    return
}</code>

ステップ 2: 各パーツの処理

マルチパート リクエストの各パーツについて:

<code class="go">part, err := mr.NextPart()
if err == io.EOF {
    break
}
if err != nil {
    http.Error(w, err.Error(), http.StatusInternalServerError)
    return
}</code>

ステップ 3: ファイル データの抽出

パーツがファイルの場合 ( part.FormName() == "file"):

<code class="go">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
}</code>

ステップ 4: JSON データを解析する

パーツに JSON データが含まれている場合 (part.FormName() == "doc") ):

<code class="go">jsonDecoder := json.NewDecoder(part)
err = jsonDecoder.Decode(&amp;doc)
if err != nil {
    http.Error(w, err.Error(), http.StatusInternalServerError)
    return
}</code>

ステップ 5: 後処理

ファイルと JSON データの両方を解析した後、データベースへの保存やファイルの送信など、必要な後処理を実行できます。クライアントへの応答。

以上がGolang で HTTP リクエストからファイルと JSON データを解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。