我在页面上有一个链接
<a class="btn btn-success" href="DownloadCsv">Download CSV</a>
当用户点击所述链接时,服务器会使用标题Content-Disposition: attachment
进行响应,以使用“保存文件”对话框提示用户。
我想要完成的是:在服务器生成响应时禁用链接,并在服务器响应后启用它。
服务器是否有针对该响应的事件被触发?或者还有其他方法可以实现这一目标吗?
答案 0 :(得分:1)
我想到的唯一方法就是使用AJAX。 您首先使用AJAX下载它,您可以在其中获得指导您的事件(例如就绪状态等)。 然后进行实际下载,但此时它将从浏览器缓存中提供。 所以它实际上并没有下载,而是立即从磁盘加载。 用户不会区分,但您将能够检测到实际下载的结束。
答案 1 :(得分:0)
我经历了旧的问题。我甚至不记得我需要它,但我现在决定回答这个问题,因为它在3。5年后还没有解决......它可以通过这种方式实现
链接可以是
<a class="btn btn-success" onclick="clickHandler(this); return false;">Download CSV</a>
处理程序
function clickHandler(element) {
//disable link
var href = element.href;
element.href = 'javascript:void(0)';
//download file
var xhr = new XMLHttpRequest();
xhr.open('GET', 'DownloadCsv', true);
xhr.responseType = 'arraybuffer';
xhr.onload = function(e) {
if (this.status == 200) {
var uInt8Array = new Uint8Array(this.response);
var i = uInt8Array.length;
var binaryString = new Array(i);
while (i--) { binaryString[i] = String.fromCharCode(uInt8Array[i]); }
var data = binaryString.join('');
//initiate save as dialog
var base64 = window.btoa(data);
var a = document.createElement('a');
a.href = 'data:application/csv;base64,'+ base64;
a.setAttribute('download', 'data.csv');
a.click();
//enable link
element.href = href;
}
};
xhr.send();
}