从服务器下载文件并在 angularjs 中给出文件名

Ali*_*Ali 3 javascript zip angularjs

我正在尝试从我的服务器(spring mvc 控制器)下载一个 zip 文件。这是我在 angularjs (1.5) 控制器中下载 zip 文件的代码。

   $http({
            url: '/myurl',
            method: 'GET',
            headers: {
                'Content-type': 'application/zip'
            },
            responseType: 'arraybuffer'
        }).success(function (data,status,headers) {
            var blob = new Blob([data], {type: "application/zip"});
            var objectUrl = URL.createObjectURL(blob);                
            var file = headers('Content-Disposition');               

            window.open(objectUrl);

        });
Run Code Online (Sandbox Code Playgroud)

上面的代码有效,但我需要给出我在响应头中得到的文件名。我从 header('Content-Disposition') 得到文件名如何使用这个文件名下载文件?目前它给出了任何随机文件名。

我尝试了下面的代码,它在 chrome 中工作,但在 mozilla 中不起作用......还有其他解决方案可以在所有浏览器中使用吗?

            //var anchor = document.createElement("a");
            //anchor.download = "ATMOSLogFiles.zip";
            //anchor.href = objectUrl;
            //anchor.click();
Run Code Online (Sandbox Code Playgroud)

感谢帮助 !

lin*_*lin 7

基于blob的解决方案:

您可以使用angular-file-saver来实现这一点。

var app = angular.module('myApp', ['ngFileSaver'])

app.controller('ExampleCtrl', ['FileSaver', 'Blob', function () {
    $scope.download = function () {
        var myData = new Blob([text], { type: 'text/plain;charset=utf-8' });
        FileSaver.saveAs(myData, 'text.txt');
    }
}]);
Run Code Online (Sandbox Code Playgroud)

另一个基于 HTML5 的解决方案:

通过使用 HTML5下载属性/ MDN 文档的简单方法。不需要斑点。任何支持 AngularJS 的浏览器和浏览器版本都支持此属性(不包括 IE10/IE11 - IE Edge 支持它)。

<a href="<downloadLink>" download="fileName">Download</a>
Run Code Online (Sandbox Code Playgroud)