学習備忘ログ

よく使うコードや設定のメモ

【Golang + Echo + go-playground/validator】アップロードした画像の幅や高さのバリデーションを実装

課題

  • アップロードした画像の幅や高さのバリデーションしたい

サンプル実装

画像の幅が1000以下でない場合はエラーを出す。

type SampleRequest struct {
    File       File
}

type File struct {
    Width  int `json:"width" validate:"lt=1000"`
    Height int `json:"height" validate:"lt=1000"`
}

func UploadFile(d *store.Store) echo.HandlerFunc {
    return func(c echo.Context) error {
        var r SampleRequest

        if err := c.Bind(&r); err != nil {
            return c.String(http.StatusBadRequest, err.Error())
        }

        file, _ := c.FormFile("file") //アップロードされたファイルの取得。 errの部分を_にしてるが本来であれば正しくエラー処理が必要。
        src, _ := file.Open()

        im, _, err := image.DecodeConfig(src)
        if err != nil {
            return c.String(http.StatusBadRequest, err.Error())
        }

        r.File.Width = im.Width //構造体のフィールドに代入
        r.File.Height = im.Height

        if err := c.Validate(r); err != nil { //バリデーション
            body, err := makeCreateGroupValidationErrorResponseBody(r, err)
         
        }
    }
}