【问题标题】:Uploading csv file in Golang through API call ( Curl Request & python request provided)通过 API 调用在 Golang 中上传 csv 文件(提供 Curl 请求和 python 请求)
【发布时间】:2021-03-17 09:49:54
【问题描述】:

我是 Golang 的新手,想用 client_api_keybucketclient_api_key 将 csv 文件上传到网站/em> 和 文件夹。有没有针对此的 Golang 解决方案?我正在通过 Golang 创建 csv 文件。

这是 curl 请求

curl --location -- request POST 'https://drivex-service.sample.com/report/api/upload' \
-- hearder 'Cookie: '89825f9123456fa0' \
-- form 'Client_api_key=vfBM-zrfumyh9WUTKGbQ=' \
-- form 'bucket=bucket1' \
-- form 'folder=ROLE/YES/FOLDER' \
-- form 'files[]=@/D:/User/example.csv' 

这是 python 发布请求

def drivex_upload(file_obj):
        data = {
            "folder": 'ROLE/YES/FOLDER',
            "client_api_key": 'vfBM-zrfumyh9WUTKGbQ=',
            "bucket": 'bucket1'
        }
        headers = {
            "Accept": "application/json",
            "ContentType": "multipart/form-data"
        }
        files = {
            "files[]": file_obj
        }
        
        r = requests.post(
            self.upload_url,
            data=data,
            files=files,
            headers=headers,
            verify=False,
        )
        
        if r.status_code == 200:
            json_data = r.json()
            return r, None
        else:
            return r, "error while uploading"

我在 Golang 中尝试了以下操作(不使用 multiparse),但不确定将 Client_api_key、存储桶和文件夹放在哪里

file, err := os.Create(fileName)
if err != nil {
    log.Fatal(err)
}
defer file.Close()
writer := csv.NewWriter(file)
defer writer.Flush()
// define column headers
// write column headers
writer.Write(headers)
for key := range m {
    r := make([]string, 0, 1+len(headers))
    r = append(r, m.field1,m.field2,m.field3)
    writer.Write(r)
  }
req, err := http.NewRequest("POST", "https://drivex-service.sample.com/report/api/upload", file)
if err != nil {
    log.Fatal(err)
}
req.Header.Set("Accept", "application/json")

非常感谢帮助构建一个有效的 Golang POST 请求!

【问题讨论】:

    标签: python csv go curl http-post


    【解决方案1】:

    我认为这样做:

    package main
    
    import (
       "net/http"
       "net/url"
       "os"
    )
    
    func main() {
       r, e := http.NewRequest(
          "POST", "https://drivex-service.sample.com/report/api/upload", nil,
       )
       if e != nil {
          panic(e)
       }
       f, e := os.ReadFile("file.csv")
       if e != nil {
          panic(e)
       }
       v := url.Values{
          "Client_api_key": {"=vfBM-zrfumyh9WUTKGbQ="},
          "bucket": {"bucket1"},
          "files[]": {string(f)},
          "folder": {"ROLE/YES/FOLDER"},
       }
       r.URL.RawQuery = v.Encode()
       r.Header.Set("Cookie", "89825f9123456fa0")
       new(http.Client).Do(r)
    }
    

    您还应该能够将查询字符串作为正文发送,以防万一 工作。

    https://golang.org/pkg/net/http#NewRequest

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-27
      • 2014-08-26
      • 2018-06-16
      • 2021-09-20
      • 1970-01-01
      • 2018-12-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多