Я использую ng2-pdfjs-viewer для отображения PDF, который пользователь загрузил на мой сервер. Каждый раз, когда пользователь щелкает файл в своем представлении, файл извлекается с сервера и превращается в большой двоичный объект и передается ng2-pdfjs-viewer для отображения во externalWindow. Это прекрасно работает для любого браузера, кроме IE11.
Сначала он работает нормально в IE, но если я закрываю и открываю один и тот же файл несколько раз, через некоторое время программа просмотра PDF выдает мне сообщение «Неожиданный ответ сервера (500) при получении PDF» blob: B04FA5CB-1012-4CBC-8DFB-59C4CE02C34A». Это также происходит, если я открываю второй экземпляр сайта с помощью IE. Когда он начинает выдавать эту ошибку, весь браузер должен быть закрыт, а затем я должен вернуться на сайт и попробовать еще раз - тогда он снова работает.
Все мои запросы к серверу проходят без проблем, я проверил с Fiddler. Единственное, что дается зрителю, - это большой двоичный объект, поэтому я не понимаю, откуда он получает неожиданный ответ от сервера. Все отлично работает на любом другом браузере.
Без просмотра pdf файлы извлекаются без проблем во всех браузерах и могут в IE их можно открыть, например, с помощью msSaveOrOpenBlob. Просмотрщик PDF, похоже, вызывает проблемы.
<!--x.component.html code-->
<ng2-pdfjs-viewer #pdfViewer style="width: 800px; height: 400px"
[externalWindow]="true"
[downloadFileName]="'document.pdf'"
[openFile]="false"
[viewBookmark]="false"
[download]="true">
</ng2-pdfjs-viewer>
//x.component.ts code
@ViewChild('pdfViewer', {static: false}) pdfViewer;
openDocument(doc: Document) {
this.storageService.fetchDocument(doc).subscribe(
res => {
let type: string = res['type'];
let file: string = res['file'];
var promise = this.uploadService.decodeFromBase64(file);
promise.then((result:string)=> {
var byteArray = [];
for (let i = 0; i < result.length; i++) {
byteArray.push(result.charCodeAt(i));
}
const blob = new Blob([new Uint8Array(byteArray)], {type: type});
var fileURL = URL.createObjectURL(blob);
if (type == "application/pdf") {
this.pdfViewer.pdfSrc = fileURL;
this.pdfViewer.refresh();
}
else {
//...
}
})
}
}