2014-11-24 825 views
0

我試圖通過Express'res.download函數將生成的文件返回到前端。我正在使用chrome,但每當我調用執行以下代碼的API時,所有返回的值都與Express res.sendFile()函數返回的值相同。Express res.download()沒有實際下載文件

我知道res.download使用res.sendFile,但我希望下載功能實際上保存到文件系統,而不僅僅是返回響應正文中的文件。

這是我的代碼。

exports.download = function(req,res) { 
    var filePath = //somefile that I want to download 
    res.download(filePath, 'response.txt', function(err) { 
     throw err; 
    } 
} 

我知道上面的代碼至少部分起作用,因爲我回來了,在響應中,文件的內容。但是,我希望將它保存到文件系統中。

我誤解了下載功能應該做什麼?我只需要將響應數據手動寫入文件系統?

+1

你是如何提出點擊調用這個端點的請求的?如果請求是通過Chrome試圖打開新頁面,則下載的唯一方法是。通過XMLHttpRequest或類似的方式向這個端點發送請求是行不通的。 – loganfsmyth 2014-11-24 23:42:00

+0

@loganfsmyth我找不到這是爲什麼。你可以解釋嗎? – Ketcomp 2015-11-24 19:28:33

+0

當您點擊一個鏈接時,它是發送請求的Chrome,Chrome的默認行爲是下載一個文件,除非它是可以呈現的文件。當你從JS發出請求時,你的JS代碼就會得到響應,並且可以隨意做任何事情,所以Chrome的默認行爲不會參與其中。 – loganfsmyth 2015-11-24 22:55:36

回答

1

res.download添加標題,建議瀏覽器該文件應該下載,而不是打開。但是,無法強制瀏覽器執行此操作;最終用戶選擇是否下載特定文件,通常情況下。

如果您使用AJAX觸發此請求,那麼這不會導致它被下載,因爲您的JavaScript正在請求它獲取數據。

我是否需要將響應數據手動寫入文件系統?

您在瀏覽器端JavaScript中沒有文件系統訪問權限。我不確定你打算如何做到這一點。

+0

我將如何觸發請求以使其被下載?幾個月前,我沒有完成我打算使用此代碼的任何問題。現在儘管它不起作用。 – kkyrazis 2014-11-24 23:02:51

+0

@kkyrazis答案完全取決於請求被觸發的方式。 AJAX?彈出窗口?點擊鏈接? – 2014-11-25 01:28:42