Ionic3 Angular - загрузка PDF-файла с блоба, не работающего на мобильном устройстве - PullRequest
0 голосов
/ 10 февраля 2019

Я пытаюсь загрузить файл, преобразованный из формата base64, в мобильное устройство.Для этого я использую следующий код: преобразование в Blob и загрузка anchor

При тестировании в браузере это работает, но при развертывании на устройстве Android файл не загружается без каких-либо ошибок.

Спасибо!

  downloadLast()
  {

    let loading = this.loadingCtrl.create({ content: 'Please wait, downloading...' });
    loading.present();
    this.rest.getObservable(url)
      .subscribe((data: any) => {
        loading.dismiss();
   URL.createObjectURL(this.convertBaseb64ToBlob(data.file, 'application/pdf'));

        const blob = this.convertBaseb64ToBlob(data.file, 'application/pdf');
        const url= window.URL.createObjectURL(blob);

        let filename = "whatsthequestion_" + this.datePipe.transform(new Date(),"ddMMyyyyHHss")+".pdf";
        var link = document.createElement('a');
        link.href = window.URL.createObjectURL(blob);
        link.download = filename;
        link.click();



        /*let filename = "whatsthequestion_" + this.datePipe.transform(new Date(),"ddMMyyyyHHss")+".pdf";
        const writeDirectory = this.platform.is('ios') ? this.file.dataDirectory : this.file.externalDataDirectory;
        this.file.writeFile(writeDirectory, filename, this.convertBaseb64ToBlob(data.file, 'application/pdf'), {replace: true})
          .then(() => {
              loading.dismiss();
              debugger;
              this.opener.open(writeDirectory + filename, 'application/pdf')
                  .catch(() => {
                      console.log('Error opening pdf file');
                      this.loading.dismiss();
                  });
          })
          .catch(function(err) {

              console.log(err);
              loading.dismiss();
          });*/




      },
        err => {

          loading.dismiss();

        });


  }



 convertBaseb64ToBlob(b64Data, contentType): Blob {
    contentType = contentType || '';
    const sliceSize = 512;
    b64Data = b64Data.replace(/^[^,]+,/, '');
    b64Data = b64Data.replace(/\s/g, '');
    const byteCharacters = window.atob(b64Data);
    const byteArrays = [];
    for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {
         const slice = byteCharacters.slice(offset, offset + sliceSize);
         const byteNumbers = new Array(slice.length);
         for (let i = 0; i < slice.length; i++) {
             byteNumbers[i] = slice.charCodeAt(i);
         }
         const byteArray = new Uint8Array(byteNumbers);
         byteArrays.push(byteArray);
    }
    debugger;
    let blob = new Blob(byteArrays, {type: contentType});
    return blob;
}
...