【发布时间】:2018-06-16 01:17:53
【问题描述】:
我想把下面的代码转换成golang。
curl -X POST
'https://api.documo.com/v1/fax/send' \
-H 'Authorization: Basic YOUR_API_KEY' \
-H 'content-type: multipart/form-data' \
-F 'recipientFax=12345678900' \
-F 'coverPage=false' \
-F 'recipientName=John' \
-F 'subject=test' \
-F 'notes=test' \
-F '=@/home/user/Documents/Sample.pdf'
请帮忙
以下是我尝试过的代码。
func SendFaxDocumo(files []*multipart.FileHeader, params map[string]string) {
request, err := SendMultipartRequest("https://api.documo.com/v1/fax/send", params, files)
if err != nil {
fmt.Println(err.Error())
}
client := &http.Client{}
resp, err := client.Do(request)
if err != nil {
fmt.Println(err.Error())
} else {
body := &bytes.Buffer{}
_, err := body.ReadFrom(resp.Body)
if err != nil {
fmt.Println(err.Error())
}
resp.Body.Close()
fmt.Println(resp.StatusCode)
fmt.Println(resp.Header)
fmt.Println(body)
}
}
func SendMultipartRequest(uri string, params map[string]string, files []*multipart.FileHeader) (*http.Request, error) {
body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
for i, _ := range files {
// string_index := strconv.Itoa(i)
file, err := files[i].Open()
defer file.Close()
if err != nil {
fmt.Println(err)
}
doc , err := ioutil.ReadAll(file)
if err != nil {
fmt.Println(err,980)
}
part, err := writer.CreateFormFile("file",files[i].Filename)
if err != nil {
fmt.Println(err)
}
part.Write([]byte(string(doc)))
if _, err = io.Copy(part, file); err != nil {
fmt.Println(err)
}
if err != nil {
fmt.Println(err)
}
}
for key, val := range params {
_ = writer.WriteField(key, val)
}
err := writer.Close()
if err != nil {
return nil, err
}
req, err := http.NewRequest("POST", uri, body)
req.Header.Set("Content-Type", writer.FormDataContentType())
req.Header.Set("Authorization", "Basic my_key")
return req, err
}
我得到的错误如下: {"error":{"name":"Error","message":"文件扩展名不允许。允许的格式:tiff,gif,png,jpeg,pdf,doc,xls,ppt,pcl,eps,ps,txt ,rtf,xml,fxc,docx,pptx,xlsx"}}
这是从请求的 url 得到的响应,即使我正在通过 pdf 尝试它。
【问题讨论】:
-
您似乎没有尝试过任何事情。请展示您尝试过的内容和无效的内容。请附上Minimal, Complete, and Verifiable example。
-
@Marc 我已经添加了您的要求,请检查
-
我们更感兴趣的是您如何在
SendMultipartRequest中对请求进行分类,而不是您如何发送请求。
标签: curl go multipartform-data