package main import ( "bytes" "fmt" "io" "io/ioutil" "mime/multipart" "net/http" "os" ) //post a file to a url func postFileForm(filename string, targetURL string, formFieldName string) (strJSON string, err error) { bodyBuf := &bytes.Buffer{} bodyWriter := multipart.NewWriter(bodyBuf) // this step is very important fileWriter, err := bodyWriter.CreateFormFile(formFieldName, filename) if err != nil { fmt.Println(err) return "", err } // open file handle fh, err := os.Open(filename) if err != nil { fmt.Println(err) return "", err } //iocopy _, err = io.Copy(fileWriter, fh) if err != nil { return "", err } contentType := bodyWriter.FormDataContentType() bodyWriter.Close() resp, err := http.Post(targetURL, contentType, bodyBuf) if err != nil { return "", err } defer resp.Body.Close() r, err := ioutil.ReadAll(resp.Body) strJSON = string(r) if err != nil { return "", err } fmt.Println(resp.Status) fmt.Println(string(strJSON)) return strJSON, nil }