使用AngularJS下载文件

时间:2015-03-05 07:50:21

标签: angularjs

我需要提供一个下载文件的链接,链接必须隐藏并且任何用户都可以访问,这是我的代码,没有任何错误,但我甚至无法打开下载对话框:

模板

 <a ng-href="#" target="page" type="button" class="btn" 
ng-click="download()">Download</a>

脚本文件

$scope.download = function(){
 //here i need to know the code,can anybody explain me
}

2 个答案:

答案 0 :(得分:11)

我必须实现这个功能。还必须确保它适用于所有主要支持的浏览器。 这是同样的解决方案!!!

快乐编码!!!

您的观看/ HTML

<a target="_self" class="ui right floated btn btn-warning" href ng-click="downloadInvoice()"> Download </a>

您的控制器

$scope.downloadInvoice = function () {
    $http.post(url,requestData, {responseType:'arraybuffer',headers:header
        })
            .success(function (response) {
                var file = new Blob([response], {type: 'application/pdf'});

                var isChrome = !!window.chrome && !!window.chrome.webstore;
                var isIE = /*@cc_on!@*/false || !!document.documentMode;
                var isEdge = !isIE && !!window.StyleMedia;


                if (isChrome){
                    var url = window.URL || window.webkitURL;

                    var downloadLink = angular.element('<a></a>');
                    downloadLink.attr('href',url.createObjectURL(file));
                    downloadLink.attr('target','_self');
                    downloadLink.attr('download', 'invoice.pdf');
                    downloadLink[0].click();
                }
                else if(isEdge || isIE){
                    window.navigator.msSaveOrOpenBlob(file,'invoice.pdf');

                }
                else {
                    var fileURL = URL.createObjectURL(file);
                    window.open(fileURL);
                }

            })
};

答案 1 :(得分:4)

首先,你可以隐藏/不公开&#34;基于Web的技术(HTML / CSS / JavaScript)应用程序中的链接。下载由客户端处理,因此下载/链接URL必须是公共的。你可以尝试隐藏&#34;保护性对象,例如下载URL中的ID使用后端执行的编程语言,如&#34; PHP或node.js等&#34;。通过这种方式,您可以创建hash网址,例如http://www.myside.com/download/359FTBW!S3T387IHS,以隐藏网址中recordId等参数。

通过了解这一点,您的解决方案非常简单。只需使用<a href="http://mydownloadurl" download>link text</a> href来强制浏览器下载ng-click来源。这里不需要download。遗憾的是,Safari浏览器不支持ng-href属性。当浏览器处理下载本身时,这并不重要。根据用户系统OS配置,将在安装在该系统上的程序中下载或直接打开文件。例如,如果某些pdf查看器应用程序可用,则PDF文件将在PDF查看器中打开。

我写了一个HTML attribute download来处理AngularJS控制器$scope中的var app = angular.module('plunker', []); app.controller('MainCtrl', function($scope) { $scope.fileHref = 'http://www.analysis.im/uploads/seminar/pdf-sample.pdf'; }); 。我希望这就是你所需要的。

您的控制器:

<head>
  <meta charset="utf-8" />
  <title>AngularJS Plunker</title>
  <script>
    document.write('<base href="' + document.location + '" />');
  </script>
  <link rel="stylesheet" href="style.css" />
  <script data-require="angular.js@1.3.x" src="https://code.angularjs.org/1.3.14/angular.js" data-semver="1.3.14"></script>
  <script src="app.js"></script>
</head>

<body ng-controller="MainCtrl">
  <a ng-href="fileHref" download="yourFilename">Download</a>
</body>
</html>

您的观点          

{{1}}