func examp(w http.ResponseWriter, req *http.Request){
text:="hi"
fmt.Fprintf(w,"%d \n",text)
http.ServeFile(w, req, "./sample.csv")
}
我不能将http.servefile与fmt.Fprintf一起使用,请始终使用第一个。我尝试了w.Header()。add但没有任何变化。我该如何解决?
答案 0 :(得分:0)
http.ServeFile
添加Content-Type
和Content-Length
并写入标题。这必须在您写入http.ResponseWriter
之前发生。
您的解决方案可能是避免使用http.ServeFile
并使用io.Copy
手动写入文件:
func example(w http.ResponseWriter, req *http.Request) {
// Write some headers.
w.Header.Set("Content-Type", mime.TypeByExtension(filepath.Ext(name)))
// Write your content here.
fmt.Fprint(w, someContent)
// Write the file.
fileName := "sample.csv"
f, err := io.Open(fileName)
// check err
_, err = io.Copy(w, f)
// check err
}
io.Copy
的缺点是它不支持Range请求(用于恢复下载等)