当浏览器需要 .XLS 或其他二进制文件时返回文本错误消息

问题描述 投票:0回答:1

我的 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 中。

谢谢你。

html download anchor mime
1个回答
0
投票

通过删除

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.