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