Go で HTTP リクエストからファイルと JSON を解析する方法

DDD
リリース: 2024-10-24 22:12:02
オリジナル
739 人が閲覧しました

How to Parse Files and JSON from HTTP Requests in Go

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 を表します。

ファイルと 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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!