一般文件下載是使用a標簽的download屬性。在項目開發中,我遇到一種情況:我希望在頁面用戶輸入條件,點擊按鈕,服務器就會根據條件導出報表。
我的流程是先條件查相關信息,然后組合生成excel。然后再怎么做可以不操作頁面直接下載下來呢?
我想了一個辦法,先將excel保存再服務器上。然后將地址返回給頁面。這時頁面再發送一個下載的請求。這是需要觸發一個a標簽的點擊按鈕。
所以我使用了以下代碼:
var filepath = data.data;//獲取返回的文件的路徑
var index = filepath.lastIndexOf('/');
var name = filepath.substring(index+1,filepath.length);//解析文件的文件名
var a = document.createElement('a');//頁面上創建一個標簽
a.setAttribute('href','/export?filepath='+filepath+'&name='+name);//設置a 標簽的href,
a.setAttribute('download',name);//設置a 標簽的download 屬性,並限定下載文件名。
a.click();//出發a點擊事件,下載文件
我順便貼以下Nodejs下載文件的代碼:
router.get('/export',function (req, res) {
try {
let filepath = req.query.filepath;
let name = req.query.name;
let stats = fs.statSync(filepath);
res.set({
'Content-Type': 'application/octet-stream',
'Content-Disposition': 'attachment; filename='+name,
'Content-Length': stats.size
});
fs.createReadStream(filepath).pipe(res);
}catch (e){
console.log(e);
}
});