2017-06-13 26 views
1

我使用動態golang服務的一些文件,並將以下代碼處理文件的實際服務:Golang傳達文件的名稱提供給瀏覽器/客戶端

 data, err := ioutil.ReadFile(file.Path) 
     logo.RuntimeError(err) 
     http.ServeContent(w, r, file.Name, time.Now(), bytes.NewReader(data)) 

在前面的代碼「文件」只是一個保存有關該文件的各種信息的自定義結構。

這段代碼唯一的問題是,當我調用特定的處理程序時,它導致我下載一個名爲「download」的文件。我想給用戶下載一個自定義名稱的文件,或者,而是以一種儘可能保持瀏覽器中性的方式表示,以便我希望該文件具有某個名稱。

我認爲這可能是可行的使用w.WriteHeader?但是我一直無法找到任何例子或明確的指導方針。

回答

5

服務的內容之前設置content disposition頭:

f, err := os.Open(file.Path) 
if err != nil { 
    // handle error 
} 
defer f.Close() 
fi, err := f.Stat() 
if err != nil { 
    // handle error 
} 
w.Header().Set("Content-Disposition", "attachment; filename=YOURNAME") 
http.ServeContent(w, r, file.Name, fi.ModTime(), f) 

注意,這個代碼直接傳遞一個* os.File到ServeContent,而不是整個文件讀取到內存中。

的代碼可以通過調用ServeFile進一步簡化:

w.Header().Set("Content-Disposition", "attachment; filename=YOURNAME") 
http.ServeFile(w, r, file.Name) 
+0

w.Header()集( 「內容處置」, 「附件;文件名= YOURNAME」)< - 這是我所期待爲,謝謝 – George

相關問題