func fupload(w http.ResponseWriter, r *http.Request) {
    if r.Method == "POST" {
        r.ParseForm()
        company := r.FormValue("company")
        fmt.Println(company)
        _, header, _ := r.FormFile("upfile")
        fmt.Println(header.Filename)
        return
    }
    w.Write([]byte("<html><body>"))
    w.Write([]byte(fmt.Sprintf("<form method=\"POST\" enctype=\"multipart/form-data\">")))
    w.Write([]byte("Enter Company <input type=\"text\" maxlength=\"80\" size=\"80\" name=\"company\" ><br/>"))
    w.Write([]byte("File to upload: <input type=\"file\" name=\"upfile\" /><br/>"))
    w.Write([]byte("<input type=\"submit\"  value=\"Submit\"/>"))
    w.Write([]byte("</form>"))
    w.Write([]byte("</body></html>"))
    return
}

对于enctype =“multipart / form-data”,对于输入类型Text(例如)Company,此处始终返回NULL。

最佳答案

ParseForm 仅解析查询参数。从文档:

ParseForm从URL解析原始查询并更新r.Form。

对于POST或PUT请求,它还将请求正文解析为一种形式
并将结果放入r.PostForm和r.Form中。 POST和PUT正文
参数优先于r.Form中的URL查询字符串值。

如果请求主体的大小尚未受到限制
MaxBytesReader,大小上限为10MB。

ParseMultipartForm自动调用ParseForm。它是幂等的。

如果要处理“multipart / form-data”,请使用 ParseMultipartForm ,或者不要调用任何一个,而让FormValue调用所需的内容。

10-07 14:33