/**
* 文件下载
* @param url
* @param params
*/
export function downloadFile(url: string, params: any) {
// 创建POST请求
fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json', // 或者根据服务端的要求设置其他的内容类型
},
body: JSON.stringify(params), // 将参数转换为JSON字符串
})
.then((response) => {
// 从content-disposition头中获取文件名
const contentDisposition = response.headers.get('content-disposition');
const filename = contentDisposition ? decodeURIComponent(contentDisposition.split("''")[1]) : 'file.txt';
// 获取返回的Blob数据
return response.blob().then((blob) => ({ blob, filename }));
})
.then(({ blob, filename }) => {
// 创建一个代表Blob对象的URL
const blobUrl = URL.createObjectURL(blob);
// 创建一个隐藏的 标签,并设置其 href 属性
const a = document.createElement('a');
a.style.display = 'none';
a.href = blobUrl;
// 使用从响应头解析的文件名
a.download = filename;
// 将 标签附加到 DOM,并触发点击事件
document.body.appendChild(a);
a.click();
// 清理:从 DOM 中移除 标签,并释放Blob URL
document.body.removeChild(a);
URL.revokeObjectURL(blobUrl);
})
.catch((error) => {
console.error('下载文件失败:', error);
});
}