2017-01-09 67 views
0

我想实现一个按钮,将触发一个http休息呼叫到后端 - 后端会回复一个pptx文件(powerpoint) - 我想将这个文件保存在客户端。Angularjs/Javascript下载pptx在客户端

我实现了如下一段:

--- HTML --- 

<button target="_blank" type="button" class="btn btn-primary" ng-click="download()">Download</button> 


--- Javascript --- 

    $scope.download = function() { 
    registryService.setSelectedEmail($scope.data.name); 
    $http.get("http://localhost:8888/download?id="+anIdCommingFromSomewhere).then(onDownloadCompleted, onFetchError); 

    }; 

var onDownloadCompleted = function(response){ 
     var anchor = angular.element('<a/>'); //add anchor element to DOM 
     anchor.attr({ 
      href: 'data:application/vnd.openxmlformats-officedocument.presentationml.presentation;charset=utf-8,' + encodeURIComponent(response), download: 'demo.pptx' })[0].click(); 
     anchor.remove(); // make sure to remove 
}; 

这段代码实际上下载文件demo.pptx但该文件已损坏。

我试图玩reponse.data和base64编码,但没有任何成功。

会有人看到这里有什么问题吗?我觉得这个href是一个混乱的部分 - 但找不到正确的做法。

由于提前,

弗洛里安

回答

0

您可以使用下载属性的锚标记,你只是起到指向的服务器(URI)的资源,将下载的锚。 (看看https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a

希望它可以帮助

+0

这是我努力 - 你有一个想法,我究竟做错了什么? – Florian

+0

我的意思是,您可以尝试使用锚点而不是按钮,只需将您在下载函数中使用的url作为其href。 – fokion

+0

我不会下载该元素,然后将其编码为一个锚点。最好把href指向资源并用javascript点击它。 所以锚的href应该是“http:// localhost:8888/download?id =”+ anIdCommingFromSomewhere“ – fokion