zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    TextBox 只有下划线
    can't find web control library(web控件库)
    DropDownListSalesAC”有一个无效 SelectedValue,因为它不在项目列表中。
    IDE、SATA、SCSI、SAS、FC、SSD 硬盘类型
    如何打印1px表格
    CSS控制打印 分页
    Virtual Server could not open its emulated Ethernet switch driver. To fix this problem, reenable the Virtual Server Emulated Et
    Xml中SelectSingleNode方法中的xpath用法
    热带水果莫入冰箱?水果存放冰箱大法
    探索Asp.net的Postback机制
  • 原文地址:https://www.cnblogs.com/ylz8401/p/13156003.html
Copyright © 2011-2022 走看看