Fprintf与Servefile

时间:2019-03-05 08:19:46

标签: csv http go

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但没有任何变化。我该如何解决?

1 个答案:

答案 0 :(得分:0)

http.ServeFile添加Content-TypeContent-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请求(用于恢复下载等)