• angularJS实现无刷新文件下载


     1 $scope.getExcel = function () {  
     2             $http.post("/production/statistics/export", {  
     3                 storeId: $scope.$parent.currStore.storeId,  
     4                 date: $scope.$parent.ledgerDate.getTime()  
     5             }, {responseType: "blob"}).success(function (data) {  
     6                 var blob = new Blob([data], {type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"});  
     7                 var fileName = $scope.$parent.currStore.name + "_生产统计_" + $scope.$parent.ledgerDate.Format("yyyy-MM-dd");  
     8                 var a = document.createElement("a");  
     9                 document.body.appendChild(a);  
    10                 a.download = fileName;  
    11                 a.href = URL.createObjectURL(blob);  
    12                 a.click();  
    13             })  
    14         }  

    并且服务端返回的是二进制数据流.

    客户端接收后转换为指定文件格式的blob,最后创建blob对象的URL 把它放在A标签的href上 就会自动下载了

    或者

    1 $http.post($rootScope.restful_api.last_output_excel,body_data,{responseType: 'arraybuffer'}).success(function(data){
    2                 var blob = new Blob([data], {type: "application/vnd.ms-excel"});
    3                 var objectUrl = URL.createObjectURL(blob);
    4                 var aForExcel = $("<a><span class='forExcel'>下载excel</span></a>").attr("href",objectUrl);
    5                 $("body").append(aForExcel);
    6                 $(".forExcel").click();
    7                 aForExcel.remove();
    8             })

    经验总结:

    1.post的方法里要加responseType: 'arraybuffer'参数,不然下载的excel会乱码(这点一开始没注意到,费力好久)

    2.使用{type: "application/vnd.ms-excel"}的写法,可以保存为xls格式的excel文件(兼容老版本)。而使用“application/vnd.openxmlformats-officedocument.spreadsheetml.sheet”则会保存为xlsx

    3.使用增加节点调用click方法,而不使用帖子中的window.open(objectUrl)方法,是防止被浏览器当插件屏蔽弹出连接

    另外也可以分为两步来做,一是异步请求判断下载是否存在,二是再次调用在后端通过response下载文件。

  • 相关阅读:
    iOS中3种正则表达式的使用
    iOS 正则表达式
    Autolayout-VFL语言添加约束-备
    PHP一个最简单的CMS内容管理系统
    国外主流PHP框架比较
    PHP中的ob_start() 的使用
    jpGraph的应用及基本安装配置 BY 命运
    未能加载文件或程序集“Common”或它的某一个依赖项。试图加载格式不正确的程序
    Android手机 Fildder真机抓包
    axWindowsMediaPlayer1获取音频长度
  • 原文地址:https://www.cnblogs.com/lcngu/p/7056875.html
Copyright © 2020-2023  润新知