解
答案是使用 FileSaver.js。下面提供一些关键代码。
后端
// 文件名
String fileName = "文件名.文件后缀";
// 依情况而定,我下载的是 xls 文件
response.setContentType("application/vnd.ms-excel;charset=utf-8");
// 传递文件名,这里将文件名编码后又替换了 + 号
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, StandardCharsets.UTF_8.name()).replace("+","%20"));
response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
前端
const xhr = new XMLHttpRequest()
xhr.open('GET', '接口地址')
xhr.responseType = 'blob'
xhr.onload = function () {
const fileName = xhr.getResponseHeader("Content-Disposition").split(";")[1].split("filename=")[1];
saveAs(xhr.response, decodeURI(fileName));
}
// 传递 token
xhr.setRequestHeader('token', localStorage.getItem("token"));
xhr.send();
评论区