js跨域请求下载excel文件。

发布于 2022-09-04 10:58:13 字数 732 浏览 8 评论 0

前后分离后

export const download = function(options){

let xhr = new XMLHttpRequest();  // XMLHttpRequest 对象
xhr.open("GET", options.url, true);
xhr.setRequestHeader('Authorization', authorization());//前后分离的权限头
xhr.send(obj2url(options.get));
xhr.responseType = "blob";//这里是关键,它指明返回的数据的类型是二进制
xhr.onreadystatechange = function(e) {
    if (this.readyState == 4 && this.status == 200) {
        console.log('change download');
        var response = xhr.response;
        let url = URL.createObjectURL(response);
        img.src=url;//如果这里是图片,可以显示出图片。
        window.open(url);//想通过打开窗口来下载excel文件。却不可以。
    }
}

};

想通过download({url:"http://xxx.ssss:88/sss.xls"});来下载服务器的excel文件。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

素衣风尘叹 2022-09-11 10:58:13

第一楼评论的很好啊

直接用 a标签 然后模拟点击,直接系统的下载就行了,何必还要自己去ajax请求。。而且还跨域了

祖传前端下载js,供你参考

function fake_click(obj) {
  var ev = document.createEvent('MouseEvents');
  ev.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
  obj.dispatchEvent(ev);
}

function export_raw(name, data) {
  var urlObject = window.URL || window.webkitURL || window;
  var export_blob = new Blob([data]);
  var save_link = document.createElementNS('http://www.w3.org/1999/xhtml', 'a')
  save_link.href = urlObject.createObjectURL(export_blob);
  save_link.download = name;
  fake_click(save_link);
}
骄兵必败 2022-09-11 10:58:13

先弄清楚俩问题,地址是否暴露给外网请求:

(1)如果暴露给外网

就直接写a标签href指向那个地址就OK了。

(2)如果只对内网暴露

有两种方法:
1.找运维给你配置地址,让服务器excel文件夹暴露,然后走(1)
2.前端工程做一层代理,再往后端请求,就不跨域了,然后走(1),地址是你前端项目配置的地址。
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文