github.com/qiuhoude/go-web@v0.0.0-20220223060959-ab545e78f20d/prepare/03_form/demo06_uploadclient.go (about) 1 package main 2 3 import ( 4 "bytes" 5 "fmt" 6 "io" 7 "io/ioutil" 8 "mime/multipart" 9 "net/http" 10 "os" 11 ) 12 13 func main() { 14 url := "http://localhost:8000/upload" 15 filename := "./1.jpg" 16 postFile(url, filename) 17 } 18 19 func postFile(url, filename string) error { 20 bodybuf := &bytes.Buffer{} 21 bodyWriter := multipart.NewWriter(bodybuf) 22 bodyWriter.WriteField("token", "03126ee75b098a46f395694b20ac2eqiu") 23 //关键的一步操作 24 fileWriter, err := bodyWriter.CreateFormFile("uploadfile", filename) 25 if err != nil { 26 fmt.Println(err) 27 return err 28 } 29 30 // 打开文件句柄 31 fh, err := os.Open(filename) 32 if err != nil { 33 fmt.Println(err) 34 return err 35 } 36 37 // 拷贝 38 _, err = io.Copy(fileWriter, fh) 39 if err != nil { 40 return err 41 } 42 contentType := bodyWriter.FormDataContentType() 43 bodyWriter.Close() 44 45 // post请求 46 resp, err := http.Post(url, contentType, bodybuf) 47 if err != nil { 48 return err 49 } 50 defer resp.Body.Close() 51 52 resp_body, err := ioutil.ReadAll(resp.Body) 53 if err != nil { 54 return err 55 } 56 fmt.Println(resp.Status) 57 fmt.Println(string(resp_body)) 58 return nil 59 }