No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

71 líneas
1.3KB

  1. package main
  2. import (
  3. "bytes"
  4. "fmt"
  5. "io"
  6. "io/ioutil"
  7. "mime/multipart"
  8. "net/http"
  9. "os"
  10. )
  11. //post a file to a url
  12. func postFileForm(filename string, targetURL string, formFieldName string) (strJSON string, err error) {
  13. bodyBuf := &bytes.Buffer{}
  14. bodyWriter := multipart.NewWriter(bodyBuf)
  15. // this step is very important
  16. fileWriter, err := bodyWriter.CreateFormFile(formFieldName, filename)
  17. if err != nil {
  18. fmt.Println(err)
  19. return "", err
  20. }
  21. // open file handle
  22. fh, err := os.Open(filename)
  23. if err != nil {
  24. fmt.Println(err)
  25. return "", err
  26. }
  27. //iocopy
  28. _, err = io.Copy(fileWriter, fh)
  29. if err != nil {
  30. return "", err
  31. }
  32. contentType := bodyWriter.FormDataContentType()
  33. bodyWriter.Close()
  34. resp, err := http.Post(targetURL, contentType, bodyBuf)
  35. if err != nil {
  36. return "", err
  37. }
  38. defer resp.Body.Close()
  39. r, err := ioutil.ReadAll(resp.Body)
  40. strJSON = string(r)
  41. if err != nil {
  42. return "", err
  43. }
  44. fmt.Println(resp.Status)
  45. fmt.Println(string(strJSON))
  46. return strJSON, nil
  47. }
  48. func postJSON(jsonB []byte, targetURL string) (resp string, err error) {
  49. req, err := http.NewRequest("POST", targetURL, bytes.NewBuffer(jsonB))
  50. if err != nil {
  51. return
  52. }
  53. client := &http.Client{}
  54. r, err := client.Do(req)
  55. if err != nil {
  56. return
  57. }
  58. defer r.Body.Close()
  59. b, _ := ioutil.ReadAll(r.Body)
  60. resp = string(b)
  61. return
  62. }