go使用mime/multipart包案例
1.multipart实现了MIME的multipart解析,参见RFC 2046。该实现适用于HTTP(RFC 2388)和常见浏览器生成的multipart主体,个人理解期本质就是默认from在网络中传输格式
案例一:普通普通表单上传后端程序
func main() { buf:=new(bytes.Buffer) bodywriter:=multipart.NewWriter(buf) bodywriter.WriteField("name","lisi") bodywriter.WriteField("age","40") contentType:=bodywriter.FormDataContentType() defer bodywriter.Close() url:="http://www.shop.com:8088/index/index/aa" http.Post(url,contentType,buf) }
案例二:带文件上传的表单上传
package main import ( "bytes" "fmt" "io" "io/ioutil" "mime/multipart" "net/http" "os" ) func postFrom(){ buf:=new(bytes.Buffer) bodywriter:=multipart.NewWriter(buf) contentType:=bodywriter.FormDataContentType() //字段 bodywriter.WriteField("name","lisi") bodywriter.WriteField("age","40") defer bodywriter.Close() //文件 upwriter,_:=bodywriter.CreateFormFile("upload","upload") srcFile,_:=os.Open("../1.zip") defer srcFile.Close() io.Copy(upwriter,srcFile) //发送 url:="http://127.0.0.1:9007/hello" req,_:=http.Post(url,contentType,buf) data,_:= ioutil.ReadAll(req.Body) fmt.Printf("%v",string(data)) } func main(){ postFrom() }
接收数据内容:
package main import ( "fmt" "io" "log" "net/http" "os" ) func hello( w http.ResponseWriter, r * http.Request) { // 根据字段名获取表单文件 formFile, header, err := r.FormFile("upload")//获取上传文件资源 destFile, err := os.Create(header.Filename) if err != nil { log.Printf("Create failed: %s\n", err) return } defer formFile.Close() defer destFile.Close() // 读取表单文件,写入保存文件 _, err = io.Copy(destFile, formFile) if err != nil { log.Printf("Write file failed: %s\n", err) return } name:=r.PostFormValue("name")//字段内容 age:=r.PostFormValue("age")//年龄 fmt.Println(name,age) } func main() { http.HandleFunc("/hello",hello) err:= http.ListenAndServe("127.0.0.1:9007",nil) if err != nil { fmt.Print(err) } }