2015-03-05 6 views
3

Мне нужно указать ссылку для скачивания файла, ссылка должна быть скрыта и доступна любым пользователям. Вот мой код, ошибок нет, но я даже не могу загрузить диалоговое окно для открытия:Загрузить файл с AngularJS

Шаблон

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

Script файл

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

ответ

4

Прежде всего, ваш не может "скрыть/не является публичной" звеном в технологии на основе веб (HTML/CSS/JavaScript). Загрузки обрабатываются клиентом, поэтому URL-адрес Download/Link должен быть общедоступным. Вы можете попытаться «скрыть» защитные параметры, например, Идентификаторы в URL-адресе загрузки с использованием бэкэнда, исполняемого языка программирования, такого как «PHP или node.js и т. Д.». Таким образом, вы можете создать URL-адреса hash, такие как http://www.myside.com/download/359FTBW!S3T387IHS, чтобы скрыть параметры, такие как recordId в вашем URL-адресе.

Зная это, ваше решение довольно простое. Просто используйте HTML attribute download как <a href="http://mydownloadurl" download>link text</a>, чтобы заставить браузер скачать href источник. Здесь нет ng-click. К сожалению, атрибут download не поддерживается браузером Safari. Это не имеет большого значения, когда браузер обрабатывает загрузку. В зависимости от конфигурации операционной системы пользователей файл будет загружен или открыт непосредственно в программе, установленной в этой системе. Например, файл PDF будет открыт в средстве просмотра PDF, если доступно какое-либо приложение для просмотра PDF.

Я написал Plunker, который обрабатывает ng-href в контроллере 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="[email protected]" 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> 
5

я должен был достичь функциональности. Также необходимо убедиться, что он работает для всех основных поддерживаемых браузеров. Вот решение для того же !!!

Happy Coding !!!

Ваш взгляд/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 = /*@[email protected]*/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); 
       } 

      }) 
};