Optimize data processing for the multipart type
This commit is contained in:
parent
3795aecb68
commit
64d8c9d5d0
13
headers.go
13
headers.go
@ -1,10 +1,3 @@
|
||||
/*
|
||||
*FileName: header.go
|
||||
*Author: JJXu
|
||||
*CreateTime: 2022/3/1 下午9:44
|
||||
*Description:
|
||||
*/
|
||||
|
||||
package simpleRequest
|
||||
|
||||
import (
|
||||
@ -70,6 +63,12 @@ func (s *HeadersConf) Add(header, value string) *HeadersConf {
|
||||
return s
|
||||
}
|
||||
|
||||
// Omit Use to disable automatically generated request headers ,some like Content_Type.
|
||||
func (s *HeadersConf) Omit(keys ...string) *HeadersConf {
|
||||
s.simpleReq.omitHeaderKeys = append(s.simpleReq.omitHeaderKeys, keys...)
|
||||
return s
|
||||
}
|
||||
|
||||
//一般用不到
|
||||
//func (s *HeadersConf) Values(keys string) *HeadersConf {
|
||||
// s.simpleReq.headers.Values(keys)
|
||||
|
22
parser.go
22
parser.go
@ -92,30 +92,16 @@ func multipartCommonParse(BodyEntry map[string]any) (reader io.Reader, contentTy
|
||||
formWriter := multipart.NewWriter(body)
|
||||
for k, sv := range BodyEntry {
|
||||
if strings.Contains(k, FormFilePathKey.string()) {
|
||||
key := k[len(FormFilePathKey):]
|
||||
fieldName := k[len(FormFilePathKey):]
|
||||
fp := sv.(string)
|
||||
filename := filepath.Base(fp)
|
||||
filePart, _ := formWriter.CreateFormFile(key, filename)
|
||||
//way1
|
||||
filePart, _ := formWriter.CreateFormFile(fieldName, filename)
|
||||
content, err := os.ReadFile(fp)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
_, _ = filePart.Write(content)
|
||||
|
||||
// way 2
|
||||
file, err := os.Open(fp)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
defer file.Close()
|
||||
fieldName := k[len(FormFilePathKey.string()):]
|
||||
formPart, err := formWriter.CreateFormFile(fieldName, filepath.Base(fp))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if _, err = io.Copy(formPart, file); err != nil {
|
||||
return
|
||||
}
|
||||
} else {
|
||||
switch multValue := sv.(type) {
|
||||
case string:
|
||||
@ -151,4 +137,4 @@ func multipartCommonParse(BodyEntry map[string]any) (reader io.Reader, contentTy
|
||||
panic(err)
|
||||
}
|
||||
return body, formWriter.FormDataContentType()
|
||||
}
|
||||
}
|
||||
|
@ -42,11 +42,12 @@ func NewRequest(opts ...OPTION) *SimpleRequest {
|
||||
}
|
||||
|
||||
type SimpleRequest struct {
|
||||
url string
|
||||
queryParams url.Values
|
||||
body io.Reader
|
||||
headers http.Header
|
||||
transport *http.Transport
|
||||
url string
|
||||
queryParams url.Values
|
||||
body io.Reader
|
||||
headers http.Header
|
||||
omitHeaderKeys []string
|
||||
transport *http.Transport
|
||||
|
||||
BodyEntryMark EntryMark
|
||||
BodyEntries map[string]any
|
||||
@ -182,9 +183,13 @@ func (s *SimpleRequest) LaunchTo(urls, method string) (body []byte, err error) {
|
||||
return nil, err
|
||||
}
|
||||
//headers
|
||||
for k := range s.headers {
|
||||
r.Header[k] = append(r.Header[k], s.headers[k]...)
|
||||
s.headers.Del(k)
|
||||
//for k := range s.headers {
|
||||
// r.Header[k] = append(r.Header[k], s.headers[k]...)
|
||||
// s.headers.Del(k)
|
||||
//}
|
||||
r.Header = s.headers
|
||||
for _, k := range s.omitHeaderKeys {
|
||||
r.Header.Del(k)
|
||||
}
|
||||
//queryParams
|
||||
if r.URL.RawQuery != "" {
|
||||
@ -262,7 +267,7 @@ func (s *SimpleRequest) initBody() {
|
||||
s.body = parser.Unmarshal(s.BodyEntryMark, s.BodyEntries)
|
||||
fdParser := parser.(*FormDataParser)
|
||||
s.headers.Set("Content-Type", fdParser.ContentType)
|
||||
|
||||
|
||||
case IsXMLType(contentTypeData):
|
||||
//application/soap+xml ,application/xml
|
||||
var parser, ok = s.bodyEntryParsers[xmlDataType]
|
||||
|
Loading…
Reference in New Issue
Block a user