简单的HTTP POST-in随文件上传

简单的HTTP POST-in随文件上传,http,go,post,upload,Http,Go,Post,Upload,我只需要知道一种非常简单的方法,使用HTTP POST将文件发送到远程服务器。我已经尝试了这么多复杂的方法,但都没有成功。我的curl命令如下: curl https://api.example.com/upload \ --user api:YOUR_API_KEY \ --data-binary @file.jpg \ --dump-header apiresponse.txt 我更喜欢不使用多部分的东西。我也更喜欢使用io.Reader的东西,这样我以后就可以轻松地实现进度条了。下

我只需要知道一种非常简单的方法,使用HTTP POST将文件发送到远程服务器。我已经尝试了这么多复杂的方法,但都没有成功。我的curl命令如下:

curl https://api.example.com/upload \
 --user api:YOUR_API_KEY \
 --data-binary @file.jpg \
 --dump-header apiresponse.txt

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

下面是我是如何做到的。感谢您指出我缺少的
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))
}

“我已经尝试了这么多复杂的方法,但没有运气”-你能展示一下你尝试了什么,遇到了什么问题吗?就是这样
os.Open
这就是我一直在寻找的缺少的简单性。成功了。别忘了关闭()文件。谢谢你的提示。IMHO Go应该对未关闭的文件句柄进行某种内部检查。