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 (для возобновления загрузки и т. д.)