2016-10-23 8 views
2

Полученный файл проходит через $http, и мне нужно сохранить данные ответа в файл, я использую angular-file-saver, полученные файлы - pdf docx, но просмотр сохраненный pdf-файл ничего не показывает читателю, в то время как другие загрузчики, такие как PostMan, действительно сохраняют его.Angularjs: как правильно сохранить blob pdf-файл, полученный с сервера

функция, которая заботится о сохранении имеет следующий код:

function saveFile(data, header){ 
    var extensions = { 
     "application/pdf": ".pdf", 
     "application/vnd.openxmlformats-officedocument.wordprocessingml.document": ".docx" 
    } 

    var file = new Blob([data], {type: header}); 

    FileSaver.saveAs(file, documentsShow.document.name + extensions[header]); 
} 

data это данные тела, извлеченные из $http успеха и header является Content-Type также получил от $http ответа

в случае, если это необходимо , код $http выглядит следующим образом:

$http({ 
    method: "GET", 
    data: data, //This is sometimes null but it's not relevant for the application 
    url: "path/to/download" 
}).then(function(data){ 
    saveFile(data.data, data.header("Content-Type")); 
}); 

ответ

3

Основная проблема, которую я вижу здесь, заключается в том, что Angular будет пытаться проанализировать ответ как JSON.

Вы можете изменить это так чтобы он удовлетворял с Blob объекта

$http.get('path/to/download', { 
    responseType: 'blob' 
}).then(function(res) { 
    FileSaver.saveAs(res.data, ...) 
}); 

FYI, data не используется в GET запросов.