2016-11-15 60 views
1

我在Go中非常新,我必须将Zamzar集成到Go微服务中。我需要POST一个文件和一个数据类型(字符串)。转到http POST文件

做一个curl看起来是这样的:

curl https://sandbox.zamzar.com/v1/jobs \ -u user:pass \ -X POST \ -F "[email protected]/tmp/portrait.gif" \ -F "target_format=png"

这是我到目前为止有:

client := &http.Client{} 

req, err := http.NewRequest("GET", "https://sandbox.zamzar.com/v1/jobs", nil) 

req.SetBasicAuth("user", "pass") 

resp, err := client.Do(req) 

if err != nil { 
    fmt.Printf("Error : %s", err) 
} else { 
    fmt.Println(resp) 
} 

我怎么能发送target_format为一个字符串,source_file作为一个文件? 我已经有文件([]byte

回答

2

使用multipart.Writer创建请求体:

var buf bytes.Buffer 
mpw := multipart.NewWriter(&buf) 
w, err := mpw.CreateFormFile("source_file", "portrait.gif") 
if err != nil { 
    // handle error 
} 
if _, err := w.Write(imageBytes); err != nil { 
    // handle error 
} 
if err := mpw.WriteField("target_format", "png"); err != nil { 
    // handle error 
} 
if err := mpw.Close(); err != nil { 
    // handle error 
} 

req, err := http.NewRequest("GET", "https://sandbox.zamzar.com/v1/jobs", &buf) 
req.Header.Set("Content-Type", mpw.FormDataContentType()) 

... continue as before.