2014-11-05 3 views
6

Я использую FileSaver.js и Blob.js в приложение с угловым JS для сохранения PDF-файла, возвращаемого службой REST (которая возвращает массив байтов, представляющих файл).Сохранение PDF, возвращаемого службой

var headers = {headers: {"Authorization":"Bearer "+token, "Accept":"application/pdf"}}; 

    $http.get(URL, headers) 
    .success(function (data) { 
     var blob = new Blob([data], {type: 'application/pdf'}); 
     saveAs(blob, 'contract.pdf'); 
    }); 

файл сохраняется с правильным типом и количеством страниц является правильным, но он полностью пуст. Открыв его с помощью редактора, оказалось, что он содержит только первую часть данных, возвращаемых сервером, например, усечен.

Спасибо всем за помощь!

+1

Вы решили это? – ronnyfm

+0

Тот же вопрос здесь; ;-) Вы нашли решение? Благодарю. –

+0

Также застрял на этом. – user2085143

ответ

7

$ http.get, вероятно, неправильно обрабатывает двоичные данные. Попробуйте $http({method: "GET", url: URL, responseType: "arraybuffer", ...})(see angularjs), чтобы получить двоичный объект, который вы можете вставить для данных.

Вы также можете использовать responseType: "blob", так что вам даже не нужно создавать var blob, но я думаю, что responseType имеет меньшую поддержку браузера.

0

Добавление типа ответа в аргумент конфигурации для меня. Попытка:

var config = { responseType: 'blob', headers: {"Authorization":"Bearer "+token, 
"Accept":"application/pdf"}}; 

    $http.get(URL, config) 
     .success(function (data) { 
      var blob = new Blob([data], {type: 'application/pdf'}); 
      saveAs(blob, 'contract.pdf'); 
     }); 
Смежные вопросы