【问题标题】:<a> element does not recognize the file extension automatically when downloading a file<a> 元素在下载文件时无法自动识别文件扩展名
【发布时间】:2019-10-17 13:40:48
【问题描述】:

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

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

这是处理文件下载的一段 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,如果转换为字符串,显然格式正确)但浏览器(谷歌浏览器)下载扩展名为 ".0 的文件"

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

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

是 JS 函数导致问题还是解决问题的方法?如果没有,几乎可以肯定报告生成器 (Devexpress) 会出现问题。

注意:如果我手动将“.0”扩展名更改为“.pdf”,文件将打开并正确显示/形成。

【问题讨论】:

    标签: javascript html pdf devexpress devexpress-mvc


    【解决方案1】:

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

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

    【讨论】:

    • 这个是覆盖“.0”扩展名还是像“.0.pdf”一样连接它?
    • @cengizsevimli 它会覆盖扩展名,所以如果你有一个像“file.0”这样的文件,你最终会得到“file.pdf”
    猜你喜欢
    • 2018-03-25
    • 2020-04-22
    • 1970-01-01
    • 2015-04-02
    • 2020-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多