node
app.post("/downfileTest", (req, res, next) => {
let filePath = __dirname + "/file/" + "可爱捏.mp4";
let f = fs.createReadStream(filePath);
let name = "tes11111111111t.mp4";
res.header( // 设置前端可访问响应头对应字段
"Access-Control-Expose-Headers",
"Other-Data, Your-Custom-Header2"
);
res.writeHead(200, {
"Content-Type": "application/force-download",
"Content-Disposition": "attachment; filename=" + "test.mp4",
"Other-Data": name,
});
f.pipe(res);
});
前端
let btn = document.querySelector('#btn')
btn.addEventListener('click', () => {
fetch('http://127.0.0.1:3000/downfileTest', {
method: 'post',
responseType: 'blob'
}).then(res => {
let name = res.headers.get('Other-Data')
return res.blob().then(res => { //异步读取
var blob = new Blob([res]);
var url = window.URL.createObjectURL(res);
var a = document.createElement("a");
a.href = url;
a.download = name;// 这里指定下载文件的文件名
a.click();
window.URL.revokeObjectURL(url);
})
}).catch(err => {
console.log(err)
})
})
顺便说一下,最好用xhr或者xhr封装,fetch我本身不太熟悉,但是懒得引入,浪费了很多时间😅,