mirror of https://github.com/gin-gonic/gin.git
Added support multipart/form-data #109
This commit is contained in:
parent
0f46ae2b81
commit
0fb7bed1c0
|
@ -25,14 +25,20 @@ type (
|
|||
// XML binding
|
||||
xmlBinding struct{}
|
||||
|
||||
// // form binding
|
||||
// form binding
|
||||
formBinding struct{}
|
||||
|
||||
// multipart form binding
|
||||
multipartFormBinding struct{}
|
||||
)
|
||||
|
||||
const MAX_MEMORY = 1 * 1024 * 1024
|
||||
|
||||
var (
|
||||
JSON = jsonBinding{}
|
||||
XML = xmlBinding{}
|
||||
Form = formBinding{} // todo
|
||||
MultipartForm = multipartFormBinding{}
|
||||
)
|
||||
|
||||
func (_ jsonBinding) Bind(req *http.Request, obj interface{}) error {
|
||||
|
@ -63,6 +69,16 @@ func (_ formBinding) Bind(req *http.Request, obj interface{}) error {
|
|||
return Validate(obj)
|
||||
}
|
||||
|
||||
func (_ multipartFormBinding) Bind(req *http.Request, obj interface{}) error {
|
||||
if err := req.ParseMultipartForm(MAX_MEMORY); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := mapForm(obj, req.Form); err != nil {
|
||||
return err
|
||||
}
|
||||
return Validate(obj)
|
||||
}
|
||||
|
||||
func mapForm(ptr interface{}, form map[string][]string) error {
|
||||
typ := reflect.TypeOf(ptr).Elem()
|
||||
formStruct := reflect.ValueOf(ptr).Elem()
|
||||
|
|
|
@ -295,6 +295,8 @@ func (c *Context) Bind(obj interface{}) bool {
|
|||
switch {
|
||||
case c.Request.Method == "GET" || ctype == MIMEPOSTForm:
|
||||
b = binding.Form
|
||||
case ctype == MIMEMultipartPOSTForm:
|
||||
b = binding.MultipartForm
|
||||
case ctype == MIMEJSON:
|
||||
b = binding.JSON
|
||||
case ctype == MIMEXML || ctype == MIMEXML2:
|
||||
|
|
Loading…
Reference in New Issue