js异步下载文件请求

Posted 敲代码的卡卡罗特

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js异步下载文件请求相关的知识,希望对你有一定的参考价值。

注意 :通常下载文件是用get请求

window.location.href=url;
但是 我们需要下载完成监听,所以必须要异步执行、用常规的ajax是不可以的。我们要用blob对象来实现
1.原生的如何实现
function loadDown(query) {
        var url = "${ctx}/bill/billExport"+query;
        var xhr = new XMLHttpRequest();
        xhr.open(‘GET‘, url, true);    // 也可以使用POST方式,根据接口
        xhr.responseType = "blob";
        xhr.onload = function () {
            if (this.status === 200) {
                $(‘#loadingModal‘).modal(‘hide‘);
                var content = this.response;
                var aTag = document.createElement(‘a‘);
                var blob = new Blob([content]);
                var headerName = xhr.getResponseHeader("Content-disposition");
                var fileName = decodeURIComponent(headerName).substring(20);
                aTag.download = fileName;
                aTag.href = URL.createObjectURL(blob);
                aTag.click();
                URL.revokeObjectURL(blob);
            }
        };
        xhr.send()
    }
2 ajax如何实现
$.ajax({
            url:options.url,
            // dataType:"text",
            // type:"get",
            success:function(result){
                var content = this.response;
                var aTag = document.createElement(‘a‘);
                var blob = new Blob([content]);
                var headerName = xhr.getResponseHeader("Content-disposition");
                var fileName = decodeURIComponent(headerName).substring(20);
                aTag.download = fileName;
                aTag.href = URL.createObjectURL(blob);
                aTag.click();
                URL.revokeObjectURL(blob);
            }
        })

 


后台:

response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename,"UTF-8"));

 

 

参考博客:https://blog.csdn.net/Concsdn/article/details/79961295

 

https://blog.csdn.net/weixin_38661747/article/details/80754258

以上是关于js异步下载文件请求的主要内容,如果未能解决你的问题,请参考以下文章

script标签的async属性是用来异步加载,异步加载的作用是否同时下载,执行html代码和js代码

有效地与请求异步下载文件

reuire代码优化之:r.js

jQuery-异步请求

ES7-Es8 js代码片段

一uniapp项目(封装异步请求moment.js时间处理封装手势滑动组件下载图片到本地)