ホームページ >バックエンド開発 >Golang >Go Gin のマルチパート フォームで JSON データと画像を受け取る方法は?

Go Gin のマルチパート フォームで JSON データと画像を受け取る方法は?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-03 01:25:15140ブラウズ

How to Receive JSON Data and an Image with Go Gin's Multipart Forms?

Go Gin で JSON データと画像を受信する

Gin は、HTTP リクエストを処理するための便利なメカニズムを提供する Go の人気のある Web フレームワークです。この特定のシナリオでは、マルチパート フォームを通じて JSON データと画像の両方を受信することに関心があります。

データ受信用の構造体

両方の JSON データを受信するにはとイメージを使用して、受信したファイルの構造をミラーリングする構造体を定義できます。 request:

type RequestData struct {
    Avatar *multipart.FileHeader `form:"avatar" binding:"required"`
    UserData struct {
        Username string `json:"username" binding:"required,min=4,max=20"`
        Description string `json:"description" binding:"required,max=100"`
    } `form:"user" binding:"required"`
}

リクエストのバインド

Gin の c.Bind メソッドを使用して、リクエスト データを定義された構造体にバインドできます。ただし、マルチパート フォームを扱っているため、c.ShouldBindWith を明示的に使用する必要があります。

var request RequestData
if err := c.ShouldBindWith(&request, binding.FormMultipart); err != nil {
    // Handle error if binding fails
}

画像の処理

バインド後、リクエスト.Avatar フィールドには画像ファイルが保持されます。画像を処理するサンプル コードは次のとおりです。

if data, err := request.Avatar.Open(); err == nil {
    // Process image data
} else {
    // Handle error if opening the file fails
}

JSON データの処理

JSON データはすでに request.UserData にバインドされています。フィールドに直接アクセスできます:

username := request.UserData.Username

使用例

Gin ハンドラーでこのアプローチを使用する方法の例を次に示します:

import (
    "github.com/gin-gonic/gin"
)

func handleMultipart(c *gin.Context) {
    var request RequestData
    if err := c.ShouldBindWith(&request, binding.FormMultipart); err != nil {
        // Handle error if binding fails
        return
    }

    // Process the image and handle any validation or business logic
}

注: ジンのリクエスト バインディングに精通している場合は、なぜそうなるのか疑問に思うかもしれません。 c.Bind の代わりに c.ShouldBindWith を明示的に使用しています。マルチパート フォームの場合、Gin は Content-Type ヘッダーに基づいて適切なバインド方法 (FormMultipart) を自動的に選択します。ただし、意図を明確にし、リクエストが正しくバインドされていることを確認するために、明示的に c.ShouldBindWith を使用します。

以上がGo Gin のマルチパート フォームで JSON データと画像を受け取る方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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