Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Excel Base 64转换为带Angular6的Excel_Angular6 - Fatal编程技术网

将Excel Base 64转换为带Angular6的Excel

将Excel Base 64转换为带Angular6的Excel,angular6,Angular6,我有一个Springboot服务,它将base64中的Excel文件发送到Angular6。出于安全考虑,我无法直接发送文件,因此,我首先将文件转换为base64 以我的角度,我可以接受base64: { "file" : "UEsDBBQACAAIAJOOOU/kSK2vGAEAADMDAAATAAAAW0NvbnRlbnRfVHlwZXNdLnht" } 字符串文件更长 但是,当我尝试打开此文件时,我在LibreOffice中发现错误,该文件已损坏 this.data.get

我有一个Springboot服务,它将base64中的Excel文件发送到Angular6。出于安全考虑,我无法直接发送文件,因此,我首先将文件转换为base64

以我的角度,我可以接受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=>

求你了,我需要帮助


当我保存一个blob“myfile.xlsx”时,Angular不会出错;但是,如果我尝试打开文件,就会出现错误。

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'});
}

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'});
}

你是我的英雄!这对我很有效你是我的英雄!它对我非常有效