• 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

  • 相关阅读:
    foreach
    jmeter的正则表达式
    jmeter四种参数化
    monkey测试命令
    monkey测试结果分析
    macOS Sierra下如何打开任何来源(10.12系统)
    开发中一些小技巧
    Xcode 使用技巧
    总有你需要的之 ios 小技巧 (下)
    在这里总结一些iOS开发中的小技巧,能大大方便我们的开发,持续更新。
  • 原文地址:https://www.cnblogs.com/ylz8401/p/13156003.html
Copyright © 2020-2023  润新知