angularJS的文件下载

一. 使用window.location.href+url的方式
  这种方式可以获取到要下载的文件,但是当下载的文件不存在,或者下载过程中后台报错的话会发生跳转

二. 使用$http实现异步无刷新的下载文件(1)

$http({
    method : "post",
    url : Constant.prefixUrl+"/customerQueryCount/exportMonthReport",
    timeout : Constant.timeout,
    responseType: "blob"   //注意此参数
}).success(function(data, status, headers, config){
    var blob = new Blob([data], {type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"});  
    if(blob.size()>0){
        var fileName = $rootScope.currentAdminUserId +""+ (new Date()).getTime();
        var a = document.createElement("a");
        document.body.appendChild(a);
        a.download = fileName;
        a.href = URL.createObjectURL(blob);
        a.click();
    }else{
        deferred.resolve("下载报表失败");
    }
}).error(function(data, status, headers, config){
    commonService.goLoginPage(status);
});

//-----------------------------------------
// 创建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);
    });
}


三. 使用$http实现异步无刷新的下载文件(2)    -----存在缺陷,如果用户禁用浏览器的window.open将不能实现文件的下载

$http({
    method : "post",
    url : Constant.prefixUrl+"/customerQueryCount/exportMonthReport",
    timeout : Constant.timeout,
    responseType: "arraybuffer" //注意此参数
}).success(function(data, status, headers, config){
    var blob = new Blob([data], {type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"});
    var objectUrl = URL.createObjectURL(blob);
    window.open(objectUrl);
}).error(function(data, status, headers, config){
    commonService.goLoginPage(status);
});

转自:

https://blog.csdn.net/after_you/article/details/78085774?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

https://www.jb51.net/article/133511.htm

原文地址:https://www.cnblogs.com/ylz8401/p/13156003.html