ホームページ >バックエンド開発 >Golang >Go で HTTP リクエストからファイルと JSON を解析する方法

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

DDD
DDDオリジナル
2024-10-24 22:12:02839ブラウズ

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 サイトの他の関連記事を参照してください。

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