Я пытаюсь отобразить файл PDF, который я получаю в виде капли из $http.post
ответа. PDF-файл должен отображаться в приложении, <embed src>
например, с использованием.
Я наткнулся на пару сообщений в стеке, но мой пример почему-то не работает.
JS:
Согласно этому документу , я продолжил и попробовал ...
$http.post('/postUrlHere',{myParams}).success(function (response) {
var file = new Blob([response], {type: 'application/pdf'});
var fileURL = URL.createObjectURL(file);
$scope.content = fileURL;
});
Теперь, fileURL
насколько я понимаю, создается временный URL-адрес, который блог может использовать в качестве ссылки.
HTML:
<embed src="{{content}}" width="200" height="200"></embed>
Я не уверен, как справиться с этим в Angular, идеальной ситуацией было бы (1) назначить его области, (2) `` подготовить / перестроить '' blob в pdf (3) передать его в HTML, используя, <embed>
потому что я хотите отобразить его в приложении.
Я занимаюсь исследованиями больше суток, но почему-то не могу понять, как это работает в Angular ... И давайте просто предположим, что библиотеки просмотра PDF-файлов не были доступны.
Ответы:
Прежде всего вам нужно установить
responseType
значениеarraybuffer
. Это необходимо, если вы хотите создать большой двоичный объект данных. См. Sending_and_Receiving_Binary_Data . Итак, ваш код будет выглядеть так:Следующая часть заключается в том, что вам нужно использовать сервис $ sce, чтобы Angular доверял вашему URL-адресу. Сделать это можно так:
Не забудьте внедрить сервис $ sce .
Если все это сделано, вы можете встроить свой pdf-файл:
источник
$http.get
на полный, указавresponseType
поле:{ url: "http://127.0.0.1:8080/resources/jobs/af471106-2e71-4fe6-946c-cd1809c659e5/result/?key="+$scope.key, method: "GET", headers: { 'Accept': 'application/pdf' }, responseType: 'arraybuffer' }
И работает :)response.data
вместоresponse
, например:var file = new Blob([response.data], {type: 'application/pdf'});
Я использую AngularJS v1.3.4
HTML:
JS-контроллер:
JS сервисы:
Веб-службы Java REST - Spring MVC:
источник
Предложения Майкла работают как шарм для меня :) Если вы замените $ http.post на $ http.get, помните, что метод .get принимает 2 параметра вместо 3 ... это то, на что я потратил зря мое время ...;)
контроллер:
Посмотреть:
источник
responseType:'arraybuffer'
, только что сэкономил мне пару часов сна! +1$scope.content = $sce.trustAsResourceUrl(fileURL);
с$window.open(fileURL, '_self', '');
и открыть файл на весь экран.Я столкнулся с трудностями при использовании "window.URL" в браузере Opera, так как это привело бы к "undefined". Кроме того, с помощью window.URL документ PDF никогда не открывался в Internet Explorer и Microsoft Edge (он будет ждать вечно). Я придумал следующее решение, которое работает в IE, Edge, Firefox, Chrome и Opera (не тестировалось с Safari):
Сообщите мне, помогло ли это! :)
источник
Добавление responseType в запрос, сделанный из angular, действительно является решением, но для меня это не сработало, пока я не установил responseType в blob , а не в arrayBuffer. Код говорит сам за себя:
источник
'blob'
шрифтом можно написать короче:FileSaver.saveAs(response.data, getFileNameFromHttpResponse(response));
Создавать не нужноBlob
Последние пару дней я изо всех сил пытался загрузить PDF-файлы и изображения, все, что мне удалось загрузить, это простые текстовые файлы.
Большинство вопросов имеют одни и те же компоненты, но потребовалось время, чтобы выяснить правильный порядок, чтобы он заработал.
Спасибо @Nikolay Melnikov, ваш комментарий / ответ на этот вопрос заставил его работать.
Вкратце, вот мой бэкэнд-вызов службы AngularJS:
С моего контроллера:
источник
Самый последний ответ (для Angular 8+):
источник
Предложение кода, который я только что использовал в своем проекте с использованием AngularJS v1.7.2
источник