如何 post 同一个请求中的文件和表单字段?
How to post a file and form fields in the same request?
我有以下代码,我试图用它发送 post 请求,我想将 js.map 文件上传到 bugsnag。
...
body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
part, err := writer.CreateFormFile(filetype, filename)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Sending %s to bugsnag", filename)
io.Copy(part, file)
writer.Close()
request, err := http.NewRequest("POST", bugsnagUrl, body)
if err != nil {
log.Fatal(err)
}
request.Header.Add("Content-Type", writer.FormDataContentType())
// This is where my problem seems to be, I can't add form values this way because the map is nil
request.Form.Add("apiKey", bugsnagToken)
request.Form.Add("minifiedUrl", fileurl)
request.Form.Add("sourceMap", filename)
request.Form.Add("overwrite", "true")
client := &http.Client{}
response, err := client.Do(request)
if err != nil {
log.Fatal(err)
}
defer response.Body.Close()
上面的例子报错如下
panic: assignment to entry in nil map
goroutine 1 [running]: net/url.url.Values.Add(...)
我一直找不到任何关于如何执行此操作的示例,我使用了关于如何从 this question 上传文件的示例来实现这一目标。
我似乎可以 post 文件,但是 我怎样才能 post 文件并在我的请求中包含 post 表单值?
您应该像这样添加表单字段
writer.WriteField("apiKey", bugsnagToken)
writer.WriteField("minifiedUrl", fileurl)
writer.WriteField("sourceMap", filename)
writer.WriteField("overwrite", "true")
writer.Close()
我有以下代码,我试图用它发送 post 请求,我想将 js.map 文件上传到 bugsnag。
...
body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
part, err := writer.CreateFormFile(filetype, filename)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Sending %s to bugsnag", filename)
io.Copy(part, file)
writer.Close()
request, err := http.NewRequest("POST", bugsnagUrl, body)
if err != nil {
log.Fatal(err)
}
request.Header.Add("Content-Type", writer.FormDataContentType())
// This is where my problem seems to be, I can't add form values this way because the map is nil
request.Form.Add("apiKey", bugsnagToken)
request.Form.Add("minifiedUrl", fileurl)
request.Form.Add("sourceMap", filename)
request.Form.Add("overwrite", "true")
client := &http.Client{}
response, err := client.Do(request)
if err != nil {
log.Fatal(err)
}
defer response.Body.Close()
上面的例子报错如下
panic: assignment to entry in nil map
goroutine 1 [running]: net/url.url.Values.Add(...)
我一直找不到任何关于如何执行此操作的示例,我使用了关于如何从 this question 上传文件的示例来实现这一目标。
我似乎可以 post 文件,但是 我怎样才能 post 文件并在我的请求中包含 post 表单值?
您应该像这样添加表单字段
writer.WriteField("apiKey", bugsnagToken)
writer.WriteField("minifiedUrl", fileurl)
writer.WriteField("sourceMap", filename)
writer.WriteField("overwrite", "true")
writer.Close()