不打开新页面使用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号
浙公网安备 33010602011771号