2 回答
TA贡献1803条经验 获得超6个赞
我没有看到错误,但我确实注意到代码存在一些问题。为了这:
w.Header().Set("Content-Type", r.Header.Get("Content-Type"))
您应该使用mime 包的:
func TypeByExtension(ext string) string
确定内容类型。(如果你最终得到空字符串默认为application/octet-stream)
为了:
w.Header().Set("Content-Length", r.Header.Get("Content-Length"))
您需要从文件本身获取内容长度。通过使用请求内容长度,对于 aGET这基本上以空操作结束,但是对于 aPOST您发送回错误的长度,这可能解释了您看到的错误。打开文件后,执行以下操作:
fi, err := file.Stat()
if err != nil {
http.Error(w, err.Error(), 500)
return
}
w.Header().Set("Content-Length", fmt.Sprint(fi.Size()))
最后一件事,当您打开文件时,如果出现错误,您不需要关闭文件句柄。改为这样做:
file, err := os.Open(...)
if err != nil {
http.NotFound(w, r)
return
}
defer file.Close()
- 2 回答
- 0 关注
- 683 浏览
添加回答
举报
