https://scarletsky.github.io/2016/07/03/download-file-using-javascript/
http://blog.csdn.net/androidmi/article/details/7519243
通過ajax請(qǐng)求服務(wù)器實(shí)現(xiàn)文件下載是我們?cè)诰W(wǎng)頁(yè)開發(fā)過程中經(jīng)常遇到的需求,我的解決方案有兩種:
有可用的url
這種情況下可以可以通過創(chuàng)建<a>
并模擬點(diǎn)擊來實(shí)現(xiàn)喚醒下載窗口,代碼如下:
let a = document.createElement('a');
a.href = url;
a.download = 'filename.txt';
a.click();
只要為<a>
標(biāo)簽添加 download
屬性瞭稼,我們點(diǎn)擊這個(gè)鏈接的時(shí)候就會(huì)自動(dòng)下載文件了潮剪。download
的屬性值是可選的,它用來指定下載文件的文件名袁稽。
無可用的url
此時(shí)就需要通過ajax向后臺(tái)腳本發(fā)起請(qǐng)求勿璃,后臺(tái)的node.js
響應(yīng)代碼如下
res.set({
'Content-Type': 'application/octet-stream',
'Content-Disposition': 'attachment; filename=filename.txt',
'Content-Length': 1000
});
//file是服務(wù)器上的文件的具體路徑
fs.createReadStream(file).pipe(res);
響應(yīng)頭設(shè)為application/octet-stream
,表示傳遞的數(shù)據(jù)是二進(jìn)制流推汽,這是由node.js
中流操作所產(chǎn)生的數(shù)據(jù)類型
Content-Disposition
設(shè)為attachment
會(huì)彈出對(duì)話框讓用戶下載补疑,filename
是保存的文件名