Go 中的简单 HTTP POST 和文件上传

Ame*_*eer -1 upload post http go

我只需要知道一种在 Go 中使用 HTTP POST 将文件发送到远程服务器的极其简单的方法。我已经尝试了很多复杂的方法但没有运气。我的curl命令是这样的:

curl https://api.example.com/upload \
 --user api:YOUR_API_KEY \
 --data-binary @file.jpg \
 --dump-header apiresponse.txt
Run Code Online (Sandbox Code Playgroud)

我更喜欢不使用多部分的东西。我还更喜欢使用 io.Reader 的东西,这样我以后就可以轻松实现进度条。

Ame*_*eer 6

我是这样做的。感谢彼得指出了os.Open我所缺少的部分。

func SendPostRequest(url string, filename string) (string, []byte) {
    api_key := ReadAPIKey("../.api_key")
    client := &http.Client{}
    data, err := os.Open(filename)
    if err != nil {
        log.Fatal(err)
    }
    req, err := http.NewRequest("POST", url, data)
    if err != nil {
        log.Fatal(err)
    }
    req.SetBasicAuth("api", api_key)
    resp, err := client.Do(req)
    if err != nil {
        log.Fatal(err)
    }
    content, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        log.Fatal(err)
    }
    return resp.Status, content
}

func main() {
    status, content := SendPostRequest("https://api.example.com/upload", "test.jpg")
    fmt.Println(status)
    fmt.Println(string(content))
}
Run Code Online (Sandbox Code Playgroud)

  • 不要忘记 Close() 文件。 (3认同)