javascript - 如何在客户端使用 javascript/JQuery 检查文件下载状态
问题描述
用户单击网页上的按钮下载文件,我想跟踪文件正在下载到用户机器还是不使用客户端代码(如 javascript/JQuery)。
单击按钮时,调用 ASP.NET .ASHX Web 处理程序代码,返回要下载的文件。
当用户单击网页上的下载按钮时,我们还可以使用 javascript/JQuery 检查用户在下载文件时是否遇到问题(安全、防火墙等)。
解决方案
这可以通过附加到 AJAX 请求的“进度”事件来完成。
let xhr = new XMLHttpRequest();
xhr.addEventListener("progress",event=>{
console.log(`${event.loaded} out of ${event.total}`);
});
然后可以通过 AJAX 处理下载,方法是创建一个链接到将保存在内存中的文件数据的虚假链接:
xhr.onreadystatechange(function(){
if(this.readyState==4 && this.status==200){
//Download content via imaginary link with data saved in memory
var a = document.createElement('a');
var url = window.URL.createObjectURL(this.response);
a.href = url;
a.download = 'myfile.pdf';
document.body.append(a);
a.click();
a.remove();
window.URL.revokeObjectURL(url);
}else if(this.status==404){
console.error("page not found");
}
});
xhr.open("GET","myfile.pdf",true);
xhr.responseType = "blob";
xhr.send();
推荐阅读
- r - apache重定向时,无法从Web访问在localhost上运行的闪亮服务器
- c# - 将嵌套的反序列化 JSON 从控制器传递到视图
- typescript - 当用作对象属性时,Spy 返回 callcount 0
- php - Symfony 4 - 显示模板问题 css
- java - 让 Eclipse 忘记终止/重新启动应用程序的“记住我的决定”
- .net - NuGet 安装中的框架版本不兼容
- java - href 链接的 XPATH 不起作用。获取无效的选择器:它应该是一个元素
- c# - C# Web API 连接到 MarkLogic API - 如何传递凭据
- json.net - Json.NET 并不总是序列化嵌套类
- html - display flex 不会像预期的那样打破长线