curl - 使用相当于curl请求的Go语言上传multipart文件

标签 curl go

以下是我的 curl 请求示例。

curl -X POST -F 'upload=@/home/user/file.txt' 'some_url' -H 'api: api_key' -H 'callback_url:callback_url'

我想用 go 语言做同样的事情。谁能帮帮我

我试过以下

package main

import (
"fmt"
"net/http"
"io/ioutil"
"os"
"log"
)

func main() {
 data, err := os.Open("file.txt")
 if err != nil {
        log.Fatal(err)
    }

req, _ := http.NewRequest("POST", "url", data)
req.Header.Set("api", "api_key")

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)

fmt.Println(string(body))

}

最佳答案

package main

import (
"fmt"
"net/http"
"io/ioutil"
"os"
"log"
)

func main() {
    data, err := os.Open("file.txt")
    if err != nil {
        log.Fatal(err)
    }

    var b bytes.Buffer
    wr := multipart.NewWriter(&b)

    part, err := wr.CreateFormFile("upload", filepath.Base("file.text"))
    if err != nil {
        fmt.Println("do something")
    }
    _, err = io.Copy(part, data)

    wr.WriteField("api", "api_key")
    wr.WriteField("callback_url", "callback_url")

    wr.Close()

    req, _ := http.NewRequest("POST", "url", &b)
    req.Header.Set("api", "api_key")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(string(body))
}

关于curl - 使用相当于curl请求的Go语言上传multipart文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52309303/

相关文章:

go - 如何保证一段代码执行不超过n次

如果在 const 定义中声明和使用自定义类型,Godoc 不会生成 "const"字段?

go - aws-sdk-go-v2 PutObject api错误AccessDenied

go - 我怎样才能让 GoLand 构建一切?

logging - 如何将自定义(非 const)字符串信息添加到日志格式?

networking - Ambari 1.6.1 hadoop端口8088没有网站

php - 为什么这个 CURL 在 PHP 中有效但在 shell 中无效

git - 使用 git 克隆 https url 时出现证书问题

php - api 集成 php curl

php - 如何将 SOAP 调用交换到 cURL,以在allow_url_fopen 限制内工作?