From 8b426d0b3a1e22e7a2be3e15c3e610eebe5d8228 Mon Sep 17 00:00:00 2001 From: konjoot Date: Sat, 23 May 2015 16:52:09 +0300 Subject: [PATCH] Restore multipart/form-data support --- binding/binding.go | 9 ++++++--- binding/form_multipart.go | 25 +++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 binding/form_multipart.go diff --git a/binding/binding.go b/binding/binding.go index 40fc2aec..8730bb47 100644 --- a/binding/binding.go +++ b/binding/binding.go @@ -28,9 +28,10 @@ type Binding interface { var validate = validator.New("binding", validator.BakedInValidators) var ( - JSON = jsonBinding{} - XML = xmlBinding{} - Form = formBinding{} + XML = xmlBinding{} + JSON = jsonBinding{} + Form = formBinding{} + MultipartForm = MultipartFormBinding{} ) func Default(method, contentType string) Binding { @@ -42,6 +43,8 @@ func Default(method, contentType string) Binding { return JSON case MIMEXML, MIMEXML2: return XML + case MIMEMultipartPOSTForm: + return MultipartForm default: return Form } diff --git a/binding/form_multipart.go b/binding/form_multipart.go new file mode 100644 index 00000000..4b41ddd8 --- /dev/null +++ b/binding/form_multipart.go @@ -0,0 +1,25 @@ +// Copyright 2014 Manu Martinez-Almeida. All rights reserved. +// Use of this source code is governed by a MIT style +// license that can be found in the LICENSE file. + +package binding + +import "net/http" + +const MAX_MEMORY = 1 * 1024 * 1024 + +type multipartFormBinding struct{} + +func (_ multipartFormBinding) Name() string { + return "multipart form" +} + +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) +}