Golang获取多部分表单数据

时间:2015-03-09 10:42:03

标签: html go get multipartform-data

假设我有一个html表单

<form enctype="multipart/form-data" action="http://localhost:8080/incarcat" method="post">
    <input type="file" name="file" multiple="multiple"/>
    <input type="checkbox" name="delete" value="delete">
    <input type="submit" value="Load" />
</form>

以及下面的代码

read_form, err := req.MultipartReader()
for {
    part, err_part := read_form.NextPart()
    if err_part == io.EOF {
        break
    }
    if part.FormName() == "file" {
        //do something with files
    } else if part.FormName() == "delete" {
        //curata_folder()
        log.Println("delete is: ", part.Header.Get("delete"))
    }
}

我如何获得“删除”的价值?

part.Header.Get("delete"))

它不能正常工作

2 个答案:

答案 0 :(得分:9)

该部分实现了io.Reader接口。我假设您真正要问的是如何将零件阅读器转换为字符串,如果它不是文件。你可以这样做:

for {
   part, err_part := read_form.NextPart()
   if err_part == io.EOF {
      break
   }
   if part.FormName() == "delete" {
      buf := new(bytes.Buffer)
      buf.ReadFrom(part)
      log.Println("delete is: ", buf.String())
   } 
}

答案 1 :(得分:6)

您可以使用request.ParseMultipartForm方法满足自己的需求,然后像往常一样使用request.FormValue获取值。请注意,您还可以request.MultipartForm访问您的文件。

示例:

func(w http.ResponseWriter, r *http.Request) {
    // Here the parameter is the size of the form data that should
    // be loaded in memory, the remaining being put in temporary
    // files
    r.ParseMultipartForm(0)

    fmt.Println(r.FormValue("delete"))
}