Я пытаюсь загрузить файл, преобразованный из формата 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;
}