如何在没有浏览器的情况下使用go将文件上传到服务器?

时间:2015-08-21 08:47:29

标签: http go

trsp := &http.Transport{
    TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
}
Url := "https://127.0.0.1:8080"
client := &http.Client{Transport: trsp}
request, _ := http.NewRequest("POST", Url, nil)
k, _ := os.Open(nameOfFile)
request.Header.Set("Action", "download"+k.Name())
...
...
client.Do(request)

我有服务器,我需要上传到服务器文件。我该怎么办?我认为我应该写入request.Body然后,从服务器处理此查询

1 个答案:

答案 0 :(得分:2)

您需要使用"mime/multipart"包来制作http正文。像这样。

http://matt.aimonetti.net/posts/2013/07/01/golang-multipart-file-upload-example/

func newfileUploadRequest(uri string, params map[string]string, paramName, path string) (*http.Request, error) {
  file, err := os.Open(path)
  if err != nil {
      return nil, err
  }
  defer file.Close()

  body := &bytes.Buffer{}
  writer := multipart.NewWriter(body)
  part, err := writer.CreateFormFile(paramName, filepath.Base(path))
  if err != nil {
      return nil, err
  }
  _, err = io.Copy(part, file)

  for key, val := range params {
      _ = writer.WriteField(key, val)
  }
  err = writer.Close()
  if err != nil {
      return nil, err
  }

  return http.NewRequest("POST", uri, body)
}