ng2-pdfjs-viewer Internet Explorer 11 неожиданный ответ сервера (500) при получении PDF - PullRequest
1 голос
/ 08 октября 2019

Я использую 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 {
              //...
          }
          })
      }
    }

1 Ответ

1 голос
/ 09 октября 2019

Я нашел эту информацию из другой документации pdfjs-viewer, и похоже, что у вашего ng2-pdfjs-viewer также есть похожие проблемы.

Быстрое (или наоборот) скрытие и повторное отображение PDF приводит кошибки. Это потому, что основная часть pdf.js работает асинхронно. Для инициализации виджета требуется некоторое время. Если он будет уничтожен во время инициализации, у вас возникнут проблемы. То же самое происходит, если он инициализируется, пока более ранний экземпляр все еще уничтожается.

Помещение PDF во вкладку часто вызывает эту проблему. Переключение между вкладками часто означает, что содержимое одной из вкладок скрыто. При этом отображается содержимое новой вкладки. Я наблюдал это при использовании @ angular / material. Решение состоит в том, чтобы скрыть первую вкладку и показать новую вкладку по истечении времени ожидания

...