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

  • 相关阅读:
    现代软件工程_第一周练习_第12题
    [assembly: AssemblyVersion("1.0.1.*")] 指定版本字符串不符合所需格式
    C#中结构体与字节流互相转换
    字节转化为结构体BytesToStruct
    C#调用Microsoft.DirectX.DirectSound问题记录及解决
    C# Wpf集合双向绑定
    <转载>XML操作
    <转载>提升程序的特权(AdjustTokenPrivileges)
    <转载>批处理之FOR语句祥解
    Effective STL 笔记: Item 6--Be alert for C++'s most vexing parse
  • 原文地址:https://www.cnblogs.com/ylz8401/p/13156003.html
Copyright © 2011-2022 走看看