Не удается получить файлы PDF для просмотра в Ionic 4 на устройствах Android - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть приложение Ionic 4, разработанное с использованием InAppBrowser. Фактически, почти все приложение выполняется с помощью InAppBrowser:

Экран-заставка> URL-адрес, переданный InAppBrowser> Загрузка сайта. Пользователь входит в систему, нажимает на ссылки и перемещается по сайту. Некоторые ссылки, по которым пользователь может щелкнуть, являются PDFS (тип содержимого = application / pdf), но не имеют расширения .pdf в конце имени файла.

В iOS они нормально загружаются. В Android PDF-файлы никогда не отображаются ....

Я читал, что это известный обходной путь. Я не могу использовать обходной путь для встраивания в Google Docs, поскольку URL-адреса PDF-файлов основаны на аутентификации на нашем сайте для просмотра и доступа к PDF-файлам.

Другой вариант, который я читаю, - получить URL-адрес, загрузить файл в браузер локальной системы пользователя;затем откройте его - все это с помощью FileSystem, File, FileTransfer и FileOpener. Ниже мой блок кода и вывод из Android Studio LOGCAT:

 downloadPDF(pUrl: string) {
    console.log("==== in downloadOpenPDF function ====");

    if(this.platform.is('android')) {
      var permissions = cordova.plugins.permissions;
      permissions.hasPermission(permissions.WRITE_EXTERNAL_STORAGE , function( status ){
        if ( status.hasPermission ) {
          console.log("We DO have access to write to external storage");
        }
        else {
          console.warn("We DO NOT have access to write to external storage");
          permissions.requestPermission(permissions.WRITE_EXTERNAL_STORAGE, this.success, this.error);


        }
      });
      permissions.hasPermission(permissions.READ_EXTERNAL_STORAGE , function( status ){
        if ( status.hasPermission ) {
          console.log("We DO have access to read to external storage");
        }
        else {
          console.warn("We DO NOT have access to read to external storage");
          permissions.requestPermission(permissions.READ_EXTERNAL_STORAGE, this.success, this.error);


        }
      });
    }

    let downloadUrl = pUrl;
    console.log("downloadUrl is ================"+downloadUrl);
    let path = this.file.dataDirectory;
    let filepath = path+'mcfrenderPDF.pdf';
    console.log("path is =================="+path);

    const transfer: FileTransferObject = this.fileTransfer.create();

    transfer.download(downloadUrl, filepath,true).then(entry => {
      let url = entry.toUrl();
      console.log("url is ================="+url);
      if(this.platform.is('ios') || this.platform.is('android')) {
        console.log("================ Use Document Viewer");
        this.document.viewDocument(url, 'application/pdf',{});
      } else {
        //console.log("Device is Android = Use Google Docs");
        //this.openGoogleDocsPDF(pUrl);
        console.log("local path to file is: "+path+'mcfrenderPDF.podf');
        this.fileOpener.open(entry.URL, 'application/pdf');
      }
    })
  }

Мой вывод из моего журнала выглядит следующим образом:

2019-11-03 13:26:05.401 5213-5333/com.cat.fpd.mobile.mcf D/FileTransfer: Saved file: file:///data/user/0/com.cat.fpd.mobile.mcf/files/mcfrenderPDF.pdf
2019-11-03 13:26:05.401 5213-5333/com.cat.fpd.mobile.mcf E/FileTransfer: File plugin cannot represent download path
...