2016-04-29 28 views
2

我爲我的大學項目構建了一個節點/快速網站,在搜索到一個法律ID後,它會顯示一個包含所有不同格式文件的大表格,與此ID相關的語言。 我使用模塊「http-proxy」向客戶端請求並提供這些文件。 服務xml,xhtml,html和pdf文件時沒有錯(每個瀏覽器都能夠直接查看它們)。 我遇到了.zip和.rdf文件的問題。文件沒有損壞,但他們正在失去原來的名字node/express強制瀏覽器下載帶自定義名稱的文件

  • 當我點擊壓縮圖標,它給我的下載提示,但我失去了原來的文件名(該文件將被稱爲「代理」或「proxy.zip」,在不同瀏覽器上的不同行爲)
  • 當我點擊RDF圖標時,有些瀏覽器直接在瀏覽器中打開文件,有些瀏覽器無法識別格式,有些瀏覽器想用名稱「proxy 「)

所以我發現標籤」a「的HTML5屬性」下載「。它只是解決了我的問題,無論如何它不支持每個版本的Internet Explorer和Safari。瀏覽網頁時我發現了一些解決方法,在IE或Safari瀏覽器中查看頁面時,在div鏈接之後添加「右鍵單擊並另存爲...」,但此解決方案不適合我,因爲我不是在談論單個鏈接,而是一張充滿鏈接的表格。我的網站也需要在手機上工作。

有沒有什麼辦法可以寫一些服務器端代碼來強制瀏覽器下載帶有自定義文件名的文件?

這裏是小片的代理權代碼:

var httpProxy = require('http-proxy'); 
var proxy = httpProxy.createProxyServer({ ignorePath: true }); 

app.get('/proxy', function(req , res) { 
    var file = req.query.file; 
    var realurl = 'http://'+cfg.edb_opt.host+':'+cfg.edb_opt.port+cfg.edb_opt.rest+file; 
    console.log('Proxy: serving '+realurl); 
    proxy.web(req, res, { 'target': realurl }); 
}); 

所有CFG *變量來自一個JSON配置文件來設置主機,端口和着手,其中文件包含路徑。

感謝提前:)

回答

1

你需要一個新的頭添加到響應對象,表示文件名,並做定期下載。

res.set("Content-Disposition", "attachment;filename=somefile.ext"); 

你也可以使用「內聯」相反,如果您希望瀏覽器嘗試打開它自身內部的文件,像Chrome中的PDF文件一樣。

res.set("Content-Disposition", "inline;filename=somefile.ext"); 

按@Thomas的建議,也是一個好主意,始終包含正確的內容類型:

res.set("Content-Type", "application/octet-stream"); 
+1

執行一個下載,你可能還希望增加'內容類型:應用程序/ octet-stream「轉換爲」Content-Disposition:attachment「 – Thomas

相關問題