update for supporting file binding (#1264)
update for supporting multipart form and file binding example: ``` type PhoptUploadForm struct { imgData *multipart.FileHeader `form:"img_data" binding:"required"` ProjectID string `form:"project_id" binding:"required"` Description string `form:"description binding:"required"` } ``` ref: https://github.com/gin-gonic/gin/issues/1263
This commit is contained in:
@ -7,6 +7,7 @@ package binding
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"reflect"
|
||||
"strconv"
|
||||
"strings"
|
||||
@ -15,6 +16,34 @@ import (
|
||||
"github.com/gin-gonic/gin/internal/json"
|
||||
)
|
||||
|
||||
func mapFiles(ptr interface{}, req *http.Request) error {
|
||||
typ := reflect.TypeOf(ptr).Elem()
|
||||
val := reflect.ValueOf(ptr).Elem()
|
||||
for i := 0; i < typ.NumField(); i++ {
|
||||
typeField := typ.Field(i)
|
||||
structField := val.Field(i)
|
||||
|
||||
t := fmt.Sprintf("%s", typeField.Type)
|
||||
if string(t) != "*multipart.FileHeader" {
|
||||
continue
|
||||
}
|
||||
|
||||
inputFieldName := typeField.Tag.Get("form")
|
||||
if inputFieldName == "" {
|
||||
inputFieldName = typeField.Name
|
||||
}
|
||||
|
||||
_, fileHeader, err := req.FormFile(inputFieldName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
structField.Set(reflect.ValueOf(fileHeader))
|
||||
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
var errUnknownType = errors.New("Unknown type")
|
||||
|
||||
func mapUri(ptr interface{}, m map[string][]string) error {
|
||||
|
Reference in New Issue
Block a user