Конвертировать Excel Base 64 в Excel с Angular6 - PullRequest
1 голос
/ 25 сентября 2019

У меня есть служба Springboot, которая отправляет файл (Excel) в base64 на Angular6.Я не могу отправить файл напрямую для обеспечения безопасности, поэтому сначала я конвертирую свой файл в base64 ...

В своем Angular я могу получить base64:

 {
  "file" : "UEsDBBQACAAIAJOOOU/kSK2vGAEAADMDAAATAAAAW0NvbnRlbnRfVHlwZXNdLnht" 
 }  

Строкафайл длиннее ...

Однако, когда я пытаюсь открыть этот файл, я получаю сообщение об ошибке в LibreOffice, "поврежденный файл"

this.data.getFile(endPoint).subscribe( 
          data => {          
                     const myfile= atob(data.file);
                     const blob = new Blob([myfile], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
                     saveAs(blob, 'myfile.xlsx'); 
                  } );

РЕДАКТИРОВАТЬ:

Это значение "myfile" =>

enter image description here

Пожалуйста, мне нужна помощь ..

Угловой вводне возникает ошибка, когда я saveAs(blob, 'myfile.xlsx');, но если я пытаюсь открыть файл, я получаю ошибку.

Ответы [ 2 ]

2 голосов
/ 26 сентября 2019

atob () выводит строку UTF8, а не файл.Строка base64, которую вы получаете, скорее всего, кодируется из фактического файла, который представляет собой массив байтов.Я думаю, что эта функция ( из этого ответа ) будет работать для вас:

public base64ToBlob(b64Data, sliceSize=512) {
let byteCharacters = atob(b64Data); //data.file there
let byteArrays = [];
for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {
    let slice = byteCharacters.slice(offset, offset + sliceSize);

    let byteNumbers = new Array(slice.length);
    for (var i = 0; i < slice.length; i++) {
        byteNumbers[i] = slice.charCodeAt(i);
    }
    let byteArray = new Uint8Array(byteNumbers);
    byteArrays.push(byteArray);
}
return new Blob(byteArrays, {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'});
}
0 голосов
/ 26 сентября 2019
public base64ToBlob(b64Data, sliceSize=512) {
let byteCharacters = atob(b64Data); //data.file there
let byteArrays = [];
for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {
    let slice = byteCharacters.slice(offset, offset + sliceSize);

    let byteNumbers = new Array(slice.length);
    for (var i = 0; i < slice.length; i++) {
        byteNumbers[i] = slice.charCodeAt(i);
    }
    let byteArray = new Uint8Array(byteNumbers);
    byteArrays.push(byteArray);
}
return new Blob(byteArrays, {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'});
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...