angularjs 通过http下载php生成的excel的方法

前端之家收集整理的这篇文章主要介绍了angularjs 通过http下载php生成的excel的方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

使用PHPExcel插件的同学们都知道,导出excel是直接将生成内容修改content-type来将内容作为文件下载的,这时候需要页面上有一个url,通过点击来下载。
那么问题来了,如果在生成excel时有请求参数,只能通过js的http请求,这时候怎么下载呢?

研究了一下,有以下几种方式:

  1. angularjs创建a标签模拟下载
// 创建a标签模拟下载
function exportExcel(params,filename) {
    return $http({
        url: '/api/exportExcel',method: "POST",headers: {
            'Content-type': 'application/json'
        },params: params,responseType: 'arraybuffer'
    }).success(function (data) {
        var blob = new Blob([data],{type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"});
        var objectUrl = URL.createObjectURL(blob);
        var a = document.createElement('a');
        document.body.appendChild(a);
        a.setAttribute('style','display:none');
        a.setAttribute('href',objectUrl);
        a.setAttribute('download',filename);
        a.click();
        URL.revokeObjectURL(objectUrl);
    });
}

这个方式中要注意,如果传输的是xls,也就是excel5文件,type要设置为application/vnd.ms-excel 或application/x-excel。
2. js将请求参数生成url,创建a标签

// 生成下载url
 $scope.data.down_url = "../c_potential/get_excel?end_time="+$scope.end_date+"&liable="+liable+"&nickname="+$scope.data.nickname+"&province="+$scope.data.province_cur+"&start_time="+$scope.start_date;

然后将url绑定到某个a标签中,这种方式适合参数较少的情况,而且数据不会经过二次处理,不易发生error,唯一的缺点是需要处理两次,可以设置两个按钮,一个为生成,将参数写入url中,第二个按钮为下载excel。虽然用户是两次操作,但实际上只发生了一次http请求,不会影响性能
3. 生成后下载
第三种方式类似第二种,首先生成excel文件,储存到服务器,然后下载。涉及到磁盘IO,所以性能比较低,不推荐这种方式,只是作为一个方法记录下来。


angularjs模拟下载的方式最方便,但有可能出现error,第二种方式最保险。

猜你在找的Angularjs相关文章