@@ -219,30 +219,26 @@ func (b *DefaultBinder) bindData(destination interface{}, data map[string][]stri
219
219
}
220
220
221
221
// Handle multiple file uploads ([]*multipart.FileHeader, *multipart.FileHeader, []multipart.FileHeader)
222
- if len (files ) > 0 {
222
+ if len (files ) > 0 && isMultipartFile ( structField . Type ()) {
223
223
for _ , fileMap := range files {
224
224
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 )):
227
228
structField .Set (reflect .ValueOf (fileHeaders ))
228
229
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
233
234
}
234
235
structField .Set (reflect .ValueOf (headers ))
235
236
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 ]))
241
239
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 ]))
246
242
continue
247
243
}
248
244
}
@@ -434,3 +430,10 @@ func setFloatField(value string, bitSize int, field reflect.Value) error {
434
430
}
435
431
return err
436
432
}
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