2 回答
TA贡献1856条经验 获得超5个赞
ParseForm
只解析查询参数。从文档:
ParseForm 从 URL 解析原始查询并更新 r.Form。
对于 POST 或 PUT 请求,它还将请求正文解析为表单,并将结果放入 r.PostForm 和 r.Form 中。POST 和 PUT 正文参数优先于 r.Form 中的 URL 查询字符串值。
如果请求正文的大小尚未受 MaxBytesReader 限制,则大小上限为 10MB。
ParseMultipartForm 自动调用 ParseForm。它是幂等的。
ParseMultipartForm
如果你想处理“multipart/form-data”,要么使用,要么不调用,让FormValue
调用需要的东西。
TA贡献1809条经验 获得超8个赞
是的,您应该使用 enctype="multipart/form-data"。但是,如果您已经使用了 FormValue(key string) 或 FormFile(key string) 方法,则不应使用 ParseForm() 方法。
FormFile 返回提供的表单键的第一个文件。如有必要,FormFile 会调用 ParseMultipartForm 和 ParseForm。
FormValue 返回查询的命名组件的第一个值。POST 和 PUT 正文参数优先于 URL 查询字符串值。如有必要,FormValue 会调用 ParseMultipartForm 和 ParseForm,并忽略这些函数返回的任何错误。如果 key 不存在,则 FormValue 返回空字符串。要访问同一键的多个值,请调用 ParseForm,然后直接检查 Request.Form。
<form action="/fupload" method="POST" enctype="multipart/form-data">
<input type="file" name="fileupload">
</form>
file, _, err := req.FormFile("fileupload")
switch err {
case nil:
defer file.Close()
fileData, err := ioutil.ReadAll(file)
//check err
case http.ErrMissingFile:
//do something
default:
//do something
}
- 2 回答
- 0 关注
- 171 浏览
添加回答
举报