我的 Flask 服务器生成一个 HTML 文件,其中包含类似于此的锚标记:
<a href="https://example.com/href_without_extension" download="excelfile.xls">
Download Excel file
</a>
生成 Excel 文件可能会很慢。 如果用户在文件完全生成之前单击链接,我希望浏览器显示一个简单的文本错误页面,上面写着“请稍等一下,然后重新加载。”
但是,当我让服务器发送一个文本文件来响应单击时,我无法阻止用户下载仅包含错误文本的 .xls 文件。这是双重错误,因为用户认为 Excel 下载已成功,然后 Excel 无法打开保存到用户磁盘的文件。
在服务器端,我尝试了两种失败的方法: (1) 将响应的 MIME 类型设置为
text/plain
并
(2) 重定向到新的 URL。
我愿意更改锚标记,但: (a) 如果 .xls 文件已准备好并且我确实希望无缝下载到磁盘 (b) 由于各种原因,我不想将
.xls
扩展名放入 href 中。
谢谢你。
通过删除
href
属性来禁用首次单击后的链接,并将链接文本更改为“您的 Excel 文件即将准备就绪。请稍候”。使用 window.location
,您的 Excel 生成链接将继续加载,直到 Excel 可供下载。
HTML:
<a href="https://example.com/href_without_extension" onclick="processClick(this)" download="excelfile.xls">
Download Excel file
</a>
JavaScript:
function processClick(aTag) {
var href = aTag.getAttribute("href");
aTag.removeAttribute('href');
aTag.style.color = "gray";
aTag.innerHTML = "Your Excel file will be ready shortly. Please wait";
// start the Excel generation, the browser will continue to load until the Excel is ready to download
window.location = href;
return false;
}