不打开新页面使用a标签下载文件
使用a标签下载文件时,会先弹开一个新页面,然后下载文件,那如何在当前页面直接下载文件呢(带下载loading),代码如下:
const [downloadLoading, setDownloadLoading] = useState({}); // 下载loading(不需要的话可无视该变量)
const downloadReport = (record) => {
const { id, downloadUrl, filename } = record;
setDownloadLoading({
...downloadLoading,
[id]: true,
})
let url = decodeURIComponent(downloadUrl);
fetch(url).then((res) => {
res.blob().then((blob) => {
const blobUrl = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = blobUrl;
// 这里的文件名根据实际情况从响应头或者url里获取
a.download = filename;
a.click();
}).finally(() => {
setDownloadLoading({
...downloadLoading,
[id]: false,
})
})
});
}
<Button type="link" onClick={() => downloadReport(records)}>下载文件</Button>

浙公网安备 33010602011771号