JS中通过ajax接口后台返回的文件流如何进行下载?求助

代码如下

var url = "{#$apiHost#}/aw/export?brand_ids="+brand_ids;
var settings = {
  "async": true,
  "crossDomain": true,
  "url": url,
  "method": "GET",
  "headers": {"token": "{#$smarty.session.pc_token#}","os": "1"}
}
$.ajax(settings).done(function (response) {
    // console.log(response);


});

其中headers是权限检查,done中返回的response就是文件流(一个zip压缩包),请问如何在JS中正常下载这个文件流呢?

阅读 10.3k
3 个回答

Blobxhr 2的内容,jquery不支持,可以考虑axios或原生xhr/fetch

@改名字很伤神

我查资料有个这种方法,

var url = "{#$apiHost#}/aw/export?brand_ids="+brand_ids;
var xhr = new XMLHttpRequest();
xhr.open('GET', url);
xhr.withCredentials = true;
xhr.responseType = "blob";
xhr.setRequestHeader("token", "{#$smarty.session.pc_token#}");
xhr.setRequestHeader("os", "1");
xhr.send();
xhr.onload = function() {
    if (this.status == 200) {
        try{
            var elemIF = document.createElement("iframe");
            elemIF.src = this.responseURL;
            elemIF.style.display = "none";
            document.body.appendChild(elemIF);
        }catch(e){
        }
    }
}

但是用这种方法有如下这个问题,不知如何解决
图片描述

返回这个文件的地址,然后直接跳到那里去,会不会方便一点?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题