Go Http开发Form表单处理
原文链接: Go Http开发Form表单处理
提问?
- 对于一个form表单中有多个文件类型上传的在golang中如何处理?
multipart: NextPart: http: invalid Read on closed Body
解决方案 : 修改Header的大小
s := &http.Server{
Addr: ":12345",
ReadTimeout: 10 * time.Second,
WriteTimeout: 10 * time.Second,
MaxHeaderBytes: 1 << 20,
}
s.ListenAndServe() // listen and serve on 0.0.0.0:8080
对w接口的写入必须写在FormFile 之后
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { // 这里不能对w接口进行写入 if http.MethodPost == r.Method { f, _, err := r.FormFile("file") if err != nil { fmt.Println(err) return } defer f.Close() } w.Write([]byte(html_header)) //对w接口的写入必须写在FormFile 之后 })
文件上传
方式1:上传执行脚本:
一般网页上传文件大家都会用到这个标签
我们可以通过这个标签选取文件,使用js进行文件上传等操作,同时,该标签同时可以选取多个文件
但有些时候,进行其他操作的时候,用户需要获得文件夹路径,那么这种写法可以用该标签选取文件夹HTML表单的输入控件主要有以下几种:
文本框,对应的,用于输入文本;
口令框,对应的,用于输入口令;
单选框,对应的,用于选择一项;
复选框,对应的,用于选择多项;
下拉框,对应的
<input type="checkbox" name="checkbox" id="checkbox_id" value="value">
<label for="checkbox_id" id="checkbox_lbl">Text</label>
<script>
$("#checkbox_lbl").click(function(){
if($("#checkbox_id").is(':checked'))
$("#checkbox_id").removAttr('checked');
else
$("#checkbox_id").attr('checked');
});</script>
Form表单处理多个checkbox
<form method="post" name="myform" action="http://localhost:8081/post" >
<input type="checkbox" name="product_image_id" value="Apple" />
<input type="checkbox" name="product_image_id" value="Orange" />
<input type="checkbox" name="product_image_id" value="Grape" />
<input type="submit">
</form>
// ProcessCheckboxes will process checkboxes
func ProcessCheckboxes(w http.ResponseWriter, r *http.Request) {
r.ParseForm()
productsSelected := r.Form["product_image_id"]
fmt.Printf("%+v\n", r.Form)
log.Println(contains(productsSelected, "Grape"))
}
func contains(slice []string, item string) bool {
set := make(map[string]struct{}, len(slice))
for _, s := range slice {
set[s] = struct{}{}
}
_, ok := set[item]
return ok
}
Output
Orange and Grape checboxes are checked and submitted
map[product_image_id:[Orange Grape]]
2016/10/27 16:16:06 true
Apple and Orange checboxes are checked and submitted
map[product_image_id:[Apple Orange]]
<input type="checkbox" name="product_image_id" value="0" />
<input type="checkbox" name="product_image_id" value="1" checked/>
<input type="checkbox" name="product_image_id" value="2" checked/>
<input type="checkbox" name="product_image_id" value="3" />
<input type="checkbox" name="product_image_id" value="4" checked/>
r.Form["product_image_id"][0] == "1"
r.Form["product_image_id"][1] == "2"
r.Form["product_image_id"][2] == "4"