Added support multipart/form-data #109
This commit is contained in:
		
				
					committed by
					
						 Javier Provecho Fernandez
						Javier Provecho Fernandez
					
				
			
			
				
	
			
			
			
						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 | ||||
| 	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: | ||||
|  | ||||
							
								
								
									
										15
									
								
								gin.go
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								gin.go
									
									
									
									
									
								
							| @ -14,13 +14,14 @@ import ( | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| 	AbortIndex   = math.MaxInt8 / 2 | ||||
| 	MIMEJSON     = "application/json" | ||||
| 	MIMEHTML     = "text/html" | ||||
| 	MIMEXML      = "application/xml" | ||||
| 	MIMEXML2     = "text/xml" | ||||
| 	MIMEPlain    = "text/plain" | ||||
| 	MIMEPOSTForm = "application/x-www-form-urlencoded" | ||||
| 	AbortIndex            = math.MaxInt8 / 2 | ||||
| 	MIMEJSON              = "application/json" | ||||
| 	MIMEHTML              = "text/html" | ||||
| 	MIMEXML               = "application/xml" | ||||
| 	MIMEXML2              = "text/xml" | ||||
| 	MIMEPlain             = "text/plain" | ||||
| 	MIMEPOSTForm          = "application/x-www-form-urlencoded" | ||||
| 	MIMEMultipartPOSTForm = "multipart/form-data" | ||||
| ) | ||||
|  | ||||
| type ( | ||||
|  | ||||
		Reference in New Issue
	
	Block a user