基础
Go Web 的表单类型有三种:
r.Form
r.PostForm
r.MultipartForm
PostForm
支持 form-data
和 x-www-form-urlencoded
两种请求体,但是不支持上传文件。
MultipartForm
只支持 form-data
请求体,但是支持上传文件。
Form
包含了 URL Query 和 PostForm
两者的集合。
解析方式有两种:
r.ParseForm()
r.ParseMultipartForm(1 << 20) // 1<<20的值自行设置
当执行 ParseForm()
时,会同时解析 PostForm
。
ParseForm
->Form
->PostForm
当执行 ParseMultipartForm()
时,会同时执行 ParseForm
。
ParseMultipartForm
->MultipartForm
->Form
->PostForm
form-data
ParseForm()
下面来测试 r.ParseForm()
。
测试代码:
r.ParseForm()
fmt.Println(r.Form)
fmt.Println(r.PostForm)
fmt.Println(r.MultipartForm)
除了能够接收 URL Query,PostForm
、MultipartForm
都没有数据。
ParseMultipartForm()
下面来测试 r.ParseMultipartForm()
。
r.ParseMultipartForm(1 << 20)
fmt.Println(r.Form)
fmt.Println(r.PostForm)
fmt.Println(r.MultipartForm)
可见,所有的表单都正常。
x-www-form-urlencoded
ParseForm()
下面来测试 r.ParseForm()
。
测试代码:
r.ParseForm()
fmt.Println(r.Form)
fmt.Println(r.PostForm)
fmt.Println(r.MultipartForm)
可以看到,Form
,PostForm
都是正常的,MultipartForm
没有数据。
ParseMultipartForm()
下面来测试 r.ParseMultipartForm()
。
r.ParseMultipartForm(1 << 20)
fmt.Println(r.Form)
fmt.Println(r.PostForm)
fmt.Println(r.MultipartForm)
可以看到,Form
,PostForm
都是正常的,MultipartForm
没有数据。
如何使用
由于 x-www-form-urlencoded
性能比 form-data
高一些,所以如何不需要上传文件中,则这样搭配:
content-type: x-www-form-urlencoded
r.ParseForm()
fmt.Println(r.PostForm)
如果需要上传文件,则这样搭配:
content-type: form-data
r.ParseMultipartForm(1 << 20)
fmt.Println(r.MultipartForm)
文章评论
每天搞些小笔记