Merge branch 'develop' of https://gitee.com/fusenpack/fusenapi into develop

This commit is contained in:
eson
2023-07-06 18:23:43 +08:00
60 changed files with 1575 additions and 242 deletions

View File

@@ -1,5 +1,24 @@
package basic
import (
"fmt"
"io"
"net/http"
"reflect"
"github.com/zeromicro/go-zero/core/logx"
)
const UploadFileLimitSize = 200 << 20
// File uploadfile 文件(multipart...)
type File struct {
Filename string
Header map[string][]string
Size int64
Data []byte
}
// StatusResponse 公司自定义状态码
type StatusResponse struct {
Code int // 状态码
@@ -136,3 +155,75 @@ func (resp *Response) SetStatusAddMessage(sr *StatusResponse, msg string, data .
}
return newResp
}
var fileType = reflect.TypeOf(File{})
func RequestFileParse(r *http.Request, req any) error {
vreq := reflect.ValueOf(req)
if vreq.Kind() != reflect.Ptr {
panic("req must &req pass")
}
reqValue := vreq.Elem()
reqType := reqValue.Type()
for i := 0; i < reqType.NumField(); i++ {
if tname, ok := reqType.Field(i).Tag.Lookup("file"); ok {
file, fheader, err := r.FormFile(tname)
if err != nil {
logx.Info("upload file error")
return err
}
if fheader.Size > UploadFileLimitSize {
err = fmt.Errorf("upload file size over limit %d", UploadFileLimitSize)
logx.Info(err)
return err
}
data, err := io.ReadAll(file)
if err != nil {
logx.Info("upload file data error")
return err
}
err = file.Close()
if err != nil {
logx.Info("file close error")
return err
}
field := reqValue.Field(i)
// aa1:
// field.Field(0).Set(fheader.Filename)
// field.Field(1).Set( fheader.Header)
// field.Field(2).Set( fheader.Size)
// field.Field(3).Set( data)
if field.Kind() == reflect.Ptr {
if field.IsNil() {
fsfile := reflect.New(field.Type().Elem())
fsfile = fsfile.Elem()
fsfile.Field(0).Set(reflect.ValueOf(fheader.Filename))
fsfile.Field(1).Set(reflect.ValueOf(fheader.Header))
fsfile.Field(2).Set(reflect.ValueOf(fheader.Size))
fsfile.Field(3).Set(reflect.ValueOf(data))
field.Set(fsfile.Addr())
} else {
field = field.Elem()
field.Field(0).Set(reflect.ValueOf(fheader.Filename))
field.Field(1).Set(reflect.ValueOf(fheader.Header))
field.Field(2).Set(reflect.ValueOf(fheader.Size))
field.Field(3).Set(reflect.ValueOf(data))
}
} else {
field.Field(0).Set(reflect.ValueOf(fheader.Filename))
field.Field(1).Set(reflect.ValueOf(fheader.Header))
field.Field(2).Set(reflect.ValueOf(fheader.Size))
field.Field(3).Set(reflect.ValueOf(data))
}
}
}
return nil
}