2014-11-06 59 views
0

我想知道如何保存包含在角度服務器響應中的文件? (這樣當響應到達的文件會自動下載)從http響應角度保存文件

編輯:

我有一個$ HTTP POST方法,我在響應獲取PDF數據。成功時,我想將響應數據保存爲pdf文件。

E. G:

$http({ 
     method: 'POST', 
     url : 'theUrl', 
     data: //some array that is received 
     headers : //content type info 
} 
.success(function(response) { // I want to save the response as a pdf }); 
+0

你能具體嗎?什麼類型的文件包含在響應中,任何示例? – 2014-11-06 11:30:48

+0

我已添加編輯。回覆包含pdf數據 – user1511956 2014-11-06 11:37:57

回答

1

你不能將文檔保存爲您不必在瀏覽器中訪問該用戶的文件系統。你可以通過添加一個虛擬的iFrame的身體PDF的URL發送回,然後觸發瀏覽器建立的文件保存/打開機制:

$http({ 
    method: 'POST', 
    url : 'theUrl', 
    data: //some array that is received 
    headers : //content type info 
} 
.success(function (data) { 
    if ($('#iframe').length == 0) { 
     var $iframe = $('<iframe id="iframe" style="display: none"></iframe>'); 
     $('body').append($iframe); 
    } 
    $('#iframe').attr('src', {{url to retrieve the file}}) 
}) 
+1

啊,真好! :)我試圖做到這一點,並檢索該文件的網址是url/test.pdf。然後,我得到這個「拒絕顯示,X框選項設置爲拒絕」。我不知道,似乎在工作,除了這個x幀的東西。 – user1511956 2014-11-06 12:15:15

+0

Lee Willis:你有什麼建議可以避免這種X-Frame問題嗎?有沒有其他的/更好的方式下載這個文件?當我按下按鈕時發送請求。我可以用某種方式使用html嗎? (是的,我是一個網絡小吃;)) – user1511956 2014-11-06 12:50:58

+0

嘗試注入$ sce服務到您的控制器,然後使用:$ sce.trustAsResourceUrl(fullUrl) – 2014-11-06 17:00:00

2

使用HTML5 FileSaver接口,這樣就可以實現:

https://github.com/eligrey/FileSaver.js/

例解:

 //Call API to retrieve file stream using POST request 
       $http.post("URL", searchData, { responseType: 'arraybuffer' }).then(
          response => { 
           //Download file from response 
           saveFileAs(response); 
          }, 
          data => { 
           //raise error 
          } 
         ); 
      function saveFileAs(response) { 
         var contentDisposition = response.headers("content-disposition"); 
         //Retrieve file name from content-disposition 
         var fileName = contentDisposition.substr(contentDisposition.indexOf("filename=") + 9); 
         fileName = fileName.replace(/\"/g, ""); 
         var contentType = response.headers("content-type"); 
         var blob = new Blob([response.data], { type: contentType }); 
         saveAs(blob, fileName); 
        } 
0

在角2 ...你可以這樣做:

import { saveAs } from 'browser-filesaver/FileSaver.js' 

downloadFile(data: Response) { 
    var blob = new Blob([data], {type: 'application/x-tar'}); 
    saveAs(blob, "report.tgz"); 
}