如何解决使用JQuery使用加载器或进度表下载Excel或其他二进制文件,而无需使用Cookies
在不使用cookie的情况下,如何使用JQuery下载Excel或其他二进制文件时如何向用户显示“正在加载”小部件或进度表?
解决方法
$.ajax(url,{
xhrFields: {
responseType: 'arraybuffer'
},success: function(data,textStatus,jqXHR) {
var blob = new Blob([data],{type: jqXHR.getResponseHeader('content-type')});
var fileName = jqXHR.getResponseHeader('content-disposition').split('filename=')[1].split(';')[0];
saveAs(blob,fileName);
},progress: function(e) {
if (e.lengthComputable) {
const completedPercentage = Math.round((e.loaded * 100) / e.total);
if (completedPercentage >= 100) {
$("#loader").dialog("close");
}
}
else {
if (console) {
console.log('Content length not reported. Fix this server side.');
}
}
}
});
Fetch API似乎是通过ajax拉取二进制文件的更好的方法,但是不支持IE,这对我来说是必需的。这是我查看的代码,以防它对任何人都有帮助。我没有添加关闭“加载程序”逻辑,但是我很确定您可以在保存文件之前或之后立即进行操作。
fetch(url,{
responseType: 'blob'
}).then(response => response.blob())
.then(blob => saveAs(blob,'test.xlsx'));
此答案是通过网络和一些SO帖子拼凑而成的。请参阅以下相关链接:
- https://stackoverflow.com/a/47197970/1048376(通过$ .ajax()进行查询和下载二进制数据)
- https://stackoverflow.com/a/48437227/1048376(通过$ .ajax()进行查询和下载二进制数据-我使用了此解决方案)
- https://github.com/likerRr/jq-ajax-progress(轻量级jQuery插件,它为$ .ajax()添加了对进度和uploadProgress承诺的支持-我使用了此解决方案)
- http://www.dave-bond.com/blog/2010/01/JQuery-ajax-progress-HMTL5/ (您可以使用它代替上面的插件)
- https://github.com/eligrey/FileSaver.js(FileSaver插件主页-我使用了此解决方案)
- https://stackoverflow.com/a/25186103/1048376(使用FileSaver)
- https://github.com/axios/axios(只是看过这个,没有尝试实现)https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API (比JQuery更好,但与IE不兼容,所以不适合我)
- https://stackoverflow.com/a/62173022/1048376(如何从标题获取文件名-我使用了此解决方案)
- http://johnculviner.com/jquery-file-download-plugin-for-ajax-like-feature-rich-file-downloads/(文件下载插件主页)
- https://stackoverflow.com/a/9970672/1048376(fileDownload插件创建者John Culviner的精彩文章。多年来我一直在使用此插件,但是Vericode扫描迫使我全面使用HttpOnly cookie(叹气)。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。