2016-10-05 31 views
0

我想爲一個遠程HTML,所以我:Express和請求讓Chrome下載一個文件,而不是爲它服務

var express = require('express'); 
var request = require('request'); 

var app = express(); 

app.get('/', function (req, res) { 
    res.header('Content-Type', 'text/html'); 

    request('https://www.googleapis.com/download/storage/v1/...o/html%2Findex.html?generation=1475649807769000&alt=media') 
     .pipe(res); 
}); 

app.listen(3000, function() { 
    console.log('Example app listening on port 3000!'); 
}); 
  1. 使用Request模塊下載。
  2. 配管它表示'res

在Chrome瀏覽器中,Chrome並沒有看到HTML,而是下載了它。怎麼來的?

enter image description here

+0

可能是因爲你從管道請求的響應頭直接傳給瀏覽器,這些頭文件包含一個'content-disposition'頭文件,並且/或者它們覆蓋你的'content-type'頭文件。 – robertklep

回答

2

如果你直接管道的HTTP請求到您迴應的結果,獲得由遠程服務器設置的任何標題將被逐字複製,包括標題,可強制下載,像content-disposition

你已經想出了一個很好的解決自己:

request 
    .get(URL) 
    .on('response', (response) => { 
     delete response.headers['content-disposition'] 
    }) 
    .pipe(res); 
0

則必須將此屬性添加到標頭響應:

res.header('Content-disposition', 'attachment; filename= "' + encodeURI(file_name) +'"'); 
相關問題