<a>元素下载文件时不自动识别文件扩展名

<a> element does not recognize the file extension automatically when downloading a file

我目前正在开发一个应用程序,用户点击一个元素,该元素调用一个 JS 函数,该函数处理文件下载。

这些文件是由Devexpress XtraReports module动态生成的报告,转换为Base64,然后发送回客户端。当客户端收到 Base64 字符串时,JS 函数创建一个 <a> 元素,将 href 属性设置为 data:application/pdf;base64,JVBERi0xLjQNCiWio[...] 并使用 [=14= 模拟点击] 事件。

这是处理文件下载的一段 JS 代码:

let downloadLink;

    try {
        downloadLink = executionId ? await getLinkPdfBase64(executionId) : false;
    } catch (error) {
        downloadLink = false;
        console.log(error);
    }

    if (downloadLink) {
        const aElement = document.createElement("a");
        downloadLink = "data:application/pdf;base64," + downloadLink;
        aElement.setAttribute("download", currentReportData.LayoutName);
        aElement.setAttribute("href", downloadLink);
        aElement.click();
        aElement.remove();
    } else {
        DevExpress.ui.dialog.alert( //Ignore this, it's a Devexpress component
            "Your report could not be generated",
            "Alert"
        );
    }

问题是:

当我生成带有自定义参数类型的报告时,Devexpress 会正确生成它(Base64,如果转换为字符串,显然是正确形成的)但是浏览器 (Google Chrome) 下载文件扩展名为 ".0".

如果报告具有正常的 Devexpress 参数(如 Strings、Int32、Guids 等)),则下载的文件具有正确的 ".pdf" 扩展名。

这是正确下载的 PDF 和“.0”扩展文件的图片:

难道是JS函数导致了问题或解决了问题?如果不是,几乎可以肯定报告生成器 (Devexpress) 有问题。

NB: If I manually change the ".0" extension to ".pdf" the file opens and it is displayed / formed correctly.

原来我只是通过在 download 属性中添加文件扩展名 ".pdf" 来解决它,所以当浏览器无法识别它时,您已经指定了它是哪一个:

aElement.setAttribute("download", currentReportData.LayoutName + ".pdf");