• 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

  • 相关阅读:
    精益创业和画布实战(2):皇包车和易途8,中文包车游世界
    精益创业和画布实战(2):皇包车和易途8,中文包车游世界
    互联网公司的技术体系
    互联网公司的技术体系
    Android开发——告诉你Adapter应该写在Activity里面还是外面
    Android开发——Android手机屏幕适配方案总结
    09-抽象工厂
    08-工厂方法
    07-简单工厂(不属于设计模式)
    06-开闭原则(OCP)
  • 原文地址:https://www.cnblogs.com/ylz8401/p/13156003.html
Copyright © 2020-2023  润新知