Go で単一の HTTP リクエストから PDF ファイルと JSON データの両方を解析する方法

Linda Hamilton
リリース: 2024-10-24 15:06:02
オリジナル
404 人が閲覧しました

How to Parse Both a PDF File and JSON Data from a Single HTTP Request in Go?

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

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