@@ -219,30 +219,26 @@ func (b *DefaultBinder) bindData(destination interface{}, data map[string][]stri
219219 }
220220
221221 // Handle multiple file uploads ([]*multipart.FileHeader, *multipart.FileHeader, []multipart.FileHeader)
222- if len (files ) > 0 {
222+ if len (files ) > 0 && isMultipartFile ( structField . Type ()) {
223223 for _ , fileMap := range files {
224224 fileHeaders , exists := fileMap [inputFieldName ]
225- if exists {
226- if structField .Type () == reflect .TypeOf ([]* multipart.FileHeader (nil )) {
225+ if exists && len (fileHeaders ) > 0 {
226+ switch structField .Type () {
227+ case reflect .TypeOf ([]* multipart.FileHeader (nil )):
227228 structField .Set (reflect .ValueOf (fileHeaders ))
228229 continue
229- } else if structField . Type () == reflect .TypeOf ([]multipart.FileHeader (nil )) {
230- var headers []multipart.FileHeader
231- for _ , fileHeader := range fileHeaders {
232- headers = append ( headers , * fileHeader )
230+ case reflect .TypeOf ([]multipart.FileHeader (nil )):
231+ headers := make ( []multipart.FileHeader , len ( fileHeaders ))
232+ for i , fileHeader := range fileHeaders {
233+ headers [ i ] = * fileHeader
233234 }
234235 structField .Set (reflect .ValueOf (headers ))
235236 continue
236- } else if structField .Type () == reflect .TypeOf (& multipart.FileHeader {}) {
237-
238- if len (fileHeaders ) > 0 {
239- structField .Set (reflect .ValueOf (fileHeaders [0 ]))
240- }
237+ case reflect .TypeOf (& multipart.FileHeader {}):
238+ structField .Set (reflect .ValueOf (fileHeaders [0 ]))
241239 continue
242- } else if structField .Type () == reflect .TypeOf (multipart.FileHeader {}) {
243- if len (fileHeaders ) > 0 {
244- structField .Set (reflect .ValueOf (* fileHeaders [0 ]))
245- }
240+ case reflect .TypeOf (multipart.FileHeader {}):
241+ structField .Set (reflect .ValueOf (* fileHeaders [0 ]))
246242 continue
247243 }
248244 }
@@ -434,3 +430,10 @@ func setFloatField(value string, bitSize int, field reflect.Value) error {
434430 }
435431 return err
436432}
433+
434+ func isMultipartFile (field reflect.Type ) bool {
435+ return reflect .TypeOf (& multipart.FileHeader {}) == field ||
436+ reflect .TypeOf (multipart.FileHeader {}) == field ||
437+ reflect .TypeOf ([]* multipart.FileHeader (nil )) == field ||
438+ reflect .TypeOf ([]multipart.FileHeader (nil )) == field
439+ }
0 commit comments