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 關注
- 620 瀏覽
添加回答
舉報