如何通过调用Web服务使用AngularJS下载映像文件并保存到本地硬盘驱动器

时间:2015-01-19 11:29:32

标签: ajax angularjs web-services rest

我的要求是

  1. 在Web应用程序中,如果单击下载链接,则会进行REST Web服务调用。

  2. Web服务的响应是byte []和Content-Disposition = [attachment;]

  3. 通过弹出一个对话框将响应保存到本地驱动器中。

  4. 我尝试过使用ajax调用并成功获取byte []响应,但无法保存到本地硬盘中。代码段如下所示。

    HTML代码

    <div data-ng-app="myApp"  data-ng-controller="myCtrl" >
      <a href="#" data-ng-click="downloadImage()">download</a>
    </di>
    

    Angular Script

       angular.module("myApp", []).controller("myCtrl", function ($scope, $http){
    
         $scope.downloadImage= function (){     
               var responsePromise = $http.get(resourceUrl);
    
               responsePromise.success(function (data) {
                  alert("File Stream:"+data);
               });
    
               responsePromise.error(function(data) {
                 alert("AJAX failed! in downloading Image:"+ data);
               });
          }
        });
    

    在警报中,我正在以byte []的形式获得完整的流。我想保存到本地硬盘。我知道响应存储在浏览器内存中,但如何将存储重定向到本地驱动器?

    任何建议都将不胜感激。

    我们不应该为此使用ajax调用吗?如果没有,替代方法是什么?

    任何人都可以帮我解决这个问题,因为这是我的首要任务。

1 个答案:

答案 0 :(得分:1)

我最近使用Blob和FileSaver执行此操作:

$http.get(url, {responseType:'blob'})
.then(function(results){
    var data = results.data; 
    var blob = new Blob(
        [data],
        {type: "image/png"}
    );
    saveAs(blob, "myFilename.png");
});

特别注意$ http.get方法的responseType配置参数。

Blob

FileSaver

XMLHttpRequest#responseType

希望能帮助。