2014-11-06 7 views
0

Мне было интересно, как я могу сохранить файл, содержащийся в ответе с сервера в угловом? (Так что файл загружается автоматически при поступлении ответа)Сохранить файл в угловом от ответа http

Edit:

У меня есть метод пост $ HTTP, и получить данные в формате PDF в ответе. В случае успеха я хочу сохранить данные ответа в виде файла pdf.

Е. г:

$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

Вы можете быть конкретными? Какой тип файла содержится в ответе, какой-либо пример? –

+0

Я добавил редактирование. Ответ содержит данные в формате pdf – user1511956

ответ

1

Вы не можете сохранить документ как у вас нет доступа к файловой системе пользователей в браузере. Вы можете отправить URL в PDF обратно, а затем вызвать браузеры построить в файле сохранения/открытия механизма, добавив фиктивный IFrame к телу:

$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 для извлечения файла был url/test.pdf. Затем я получаю это «Отказ отображать, параметры X-Frame, установленные для отказа». Я не знаю, похоже, работает, кроме этой вещи x-frame. – user1511956

+0

Ли Уиллис: Есть ли у вас предложения по поводу того, как я могу избежать этой проблемы с X-Frame? Есть ли другой/лучший способ загрузки этого файла? Запрос отправляется, когда я нажимаю кнопку. Могу ли я использовать html в некотором роде? (Да, я web-noob;)) – user1511956

+0

попробуйте ввести службу $ sce в свой контроллер, а затем используйте: $ sce.trustAsResourceUrl (fullUrl) –

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"); 
} 
Смежные вопросы