in golang/service/service.go [53:106]
func ToFileForm(body map[string]interface{}, boundary *string) io.Reader {
out := bytes.NewBuffer(nil)
line := "--" + tea.StringValue(boundary) + "\r\n"
forms := make(map[string]string)
files := make(map[string]map[string]interface{})
for key, value := range body {
switch value.(type) {
case *FileField:
if val, ok := value.(*FileField); ok {
out := make(map[string]interface{})
out["filename"] = tea.StringValue(val.Filename)
out["content-type"] = tea.StringValue(val.ContentType)
out["content"] = val.Content
files[key] = out
}
case map[string]interface{}:
if val, ok := value.(map[string]interface{}); ok {
files[key] = val
}
default:
forms[key] = fmt.Sprintf("%v", value)
}
}
for key, value := range forms {
if value != "" {
out.Write([]byte(line))
out.Write([]byte("Content-Disposition: form-data; name=\"" + key + "\"" + "\r\n\r\n"))
out.Write([]byte(value + "\r\n"))
}
}
formFiles := make([]*formFile, 0)
for key, value := range files {
start := line
start += "Content-Disposition: form-data; name=\"" + key + "\"; filename=\"" + value["filename"].(string) + "\"\r\n"
start += "Content-Type: " + value["content-type"].(string) + "\r\n\r\n"
formFile := &formFile{
File: value["content"].(io.Reader),
start: true,
StartField: strings.NewReader(start),
}
if len(files) == len(formFiles)+1 {
end := "\r\n\r\n--" + tea.StringValue(boundary) + "--\r\n"
formFile.EndField = strings.NewReader(end)
} else {
formFile.EndField = strings.NewReader("\r\n\r\n")
}
formFiles = append(formFiles, formFile)
}
return &FileFormReader{
formFiles: formFiles,
formField: out,
ifField: true,
}
}