binding: add support of multipart multi files (#1878) (#1949)

* binding: add support of multipart multi files (#1878)

* update readme: add multipart file binding
This commit is contained in:
Dmitry Kutakov
2019-06-18 14:49:10 +03:00
committed by 田欧
parent 75b9d2bed7
commit 09a3650c97
4 changed files with 225 additions and 43 deletions
-26
View File
@@ -5,9 +5,7 @@
package binding
import (
"mime/multipart"
"net/http"
"reflect"
)
const defaultMemory = 32 * 1024 * 1024
@@ -63,27 +61,3 @@ func (formMultipartBinding) Bind(req *http.Request, obj interface{}) error {
return validate(obj)
}
type multipartRequest http.Request
var _ setter = (*multipartRequest)(nil)
var (
multipartFileHeaderStructType = reflect.TypeOf(multipart.FileHeader{})
)
// TrySet tries to set a value by the multipart request with the binding a form file
func (r *multipartRequest) TrySet(value reflect.Value, field reflect.StructField, key string, opt setOptions) (isSetted bool, err error) {
if value.Type() == multipartFileHeaderStructType {
_, file, err := (*http.Request)(r).FormFile(key)
if err != nil {
return false, err
}
if file != nil {
value.Set(reflect.ValueOf(*file))
return true, nil
}
}
return setByForm(value, field, r.MultipartForm.Value, key, opt)
}