ホームページ > バックエンド開発 > Golang > Go Gin フレームワークで JSON と画像のアップロードを同時に処理するにはどうすればよいですか?

Go Gin フレームワークで JSON と画像のアップロードを同時に処理するにはどうすればよいですか?

DDD
リリース: 2024-11-29 04:12:09
オリジナル
666 人が閲覧しました

How to Handle JSON and Image Upload Simultaneously in a Go Gin Framework?

Gin を使用して Go で JSON データと画像を受信する

Go では、Gin フレームワークを使用して HTTP リクエストを処理し、データをカスタム リクエスト構造にバインドできます。単一の multipart/form-data リクエストで JSON データと画像の両方を受信するには、次のリクエスト ハンドラを定義できます:

func UpdateProfile(c *gin.Context) {
    type request struct {
        Avatar      *multipart.FileHeader `form:"avatar" binding:"required"`
        User struct {
            Username    string `json:"username" binding:"required,min=4,max=20"`
            Description string `json:"description" binding:"required,max=100"`
        } `form:"user" binding:"required"`
    }

    var updateRequest request

    // Bind the request data to the request structure
    if err := c.ShouldBindWith(&updateRequest, binding.FormMultipart); err != nil {
        // Return an appropriate error response
        _ = c.AbortWithError(http.StatusBadRequest, err)
        return
    }

    // Handle the image
    // ...

    // Handle the JSON data
    // ...
}
ログイン後にコピー

リクエストの例:

両方を使用してリクエストを送信するにはJSON データと画像の場合は、multipart/form-data コンテンツ タイプを使用します。リクエスト本文は次のように構成されている必要があります:

--boundary
Content-Disposition: form-data; name="avatar"; filename="profile.jpg"
Content-Type: image/jpeg
//... image data
--boundary
Content-Disposition: form-data; name="user"
Content-Type: application/json
{
    "username": "username",
    "description": "description"
}
--boundary--
ログイン後にコピー

注:

  • バインディング タグにより、適切なフィールド検証が確実に行われます。
  • c.ShouldBindWith明示的にマルチパート/フォームデータリクエスト用に設計された FormMultipart バインディング エンジンを使用してリクエスト データをバインドします。

以上がGo Gin フレームワークで JSON と画像のアップロードを同時に処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート