<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");
我目前正在开发一个应用程序,用户点击一个元素,该元素调用一个 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");