javascript - js跨域请求下载excel文件。
伊谢尔伦
伊谢尔伦 2017-04-11 11:37:30
[JavaScript讨论组]

前后分离后

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文件。

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(2)
PHPz

第一楼评论的很好啊

直接用 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);
}
迷茫

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

(1)如果暴露给外网

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

(2)如果只对内网暴露

有两种方法:
1.找运维给你配置地址,让服务器excel文件夹暴露,然后走(1)
2.前端工程做一层代理,再往后端请求,就不跨域了,然后走(1),地址是你前端项目配置的地址。
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号