【问题标题】:How to post a file and form fields in the same request?如何在同一个请求中发布文件和表单字段?
【发布时间】:2018-11-23 01:03:24
【问题描述】:

我有以下代码,我尝试使用它来发送我想将 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()

上面的例子给出了以下错误

恐慌:分配给 nil 映射中的条目

goroutine 1 [运行中]:net/url.url.Values.Add(...)

我找不到任何关于如何做到这一点的示例,我使用了如何从this question 上传文件的示例来实现这一目标。

我似乎能够发布文件,但如何发布文件并在我的请求中包含发布表单值?

【问题讨论】:

标签: go http-post


【解决方案1】:

你应该像这样添加表单域

writer.WriteField("apiKey", bugsnagToken)
writer.WriteField("minifiedUrl", fileurl)
writer.WriteField("sourceMap", filename)
writer.WriteField("overwrite", "true")
writer.Close()

【讨论】:

    猜你喜欢
    • 2013-10-26
    • 1970-01-01
    • 2018-02-19
    • 2014-05-13
    • 2017-02-03
    • 1970-01-01
    • 2017-02-11
    • 2019-05-02
    • 2018-06-12
    相关资源
    最近更新 更多