我正在尝试发出一个简单PUT的上传文件的请求。http.NewRequest接受body(作为io.Reader)。但是传递os.Fileasbody不起作用,而首先将其读入缓冲区可以解决问题:
file, _ := os.Open(filePath)
// request, _ := http.NewRequest("PUT", myURL, file)
// ^^^ why does this not work???
var buf bytes.Buffer
tee := io.TeeReader(file, &buf)
ioutil.ReadAll(tee)
request, _ := http.NewRequest("PUT", myURL, &buf) // this works fine
request.Header.Set("Content-Type", "application/octet-stream")
http.DefaultClient.Do(request)
编辑:问题不在于设置ContentLength标题(即它被设置为默认值 0);这导致服务器不处理上传。使用缓冲区时,golang确实将标头设置为缓冲区长度,从而导致不同的行为。
ContentLength标头语义服务器是否依赖?浏览所以我的印象是标题是可选的,这显然不是这里的情况。
肥皂起泡泡
相关分类