【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) } } }