后端代码
/**
* 从服务器下载文件
*
* @param fileNamePath 文件路径
* @param response 响应
*/
public static void download(String fileNamePath, HttpServletResponse response) throws IOException {
FileInputStream in = null;
OutputStream out = null;
try {
//设置响应头,控制浏览器下载该文件
response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(fileNamePath, "UTF-8"));
//读取要下载的文件,保存到文件输入流
in = new FileInputStream(fileNamePath);
//创建输出流
out = response.getOutputStream();
//缓存区
byte[] buffer = new byte[1024];
int len = 0;
//循环将输入流中的内容读取到缓冲区中
while ((len = in.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
} finally {
//关闭
assert in != null;
in.close();
assert out != null;
out.close();
}
}
前端代码
handleDownloadClick(fileName) {
console.log(fileName)
let param = this.model;
downFile(this.url.exportXlsUrl, param).then(data => {
if (!data) {
this.$message.warning("文件下载失败");
return;
}
if (typeof window.navigator.msSaveBlob !== "undefined") {
window.navigator.msSaveBlob(
new Blob([data], { type: "application/vnd.ms-excel" }),
fileName + ".xls"
);
} else {
const url = window.URL.createObjectURL(
new Blob([data], { type: "application/vnd.ms-excel" })
);
const link = document.createElement("a");
link.style.display = "none";
link.href = url;
link.setAttribute("download", fileName + ".xls");
document.body.appendChild(link);
link.click();
document.body.removeChild(link); // 下载完成移除元素
window.URL.revokeObjectURL(url); // 释放掉blob对象
}
});
}