不打开新页面使用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>
posted @ 2022-11-25 17:28  ZerlinM  阅读(624)  评论(0)    收藏  举报