2017-01-09 68 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