我有一个 Springboot 服务,可以将 base64 中的文件(Excel)发送到 Angular6。为了安全起见,我无法直接发送文件,因此,我首先将文件转换为 base64 ...
在我的 Angular 中,我可以收到 base64 :
{
"file" : "UEsDBBQACAAIAJOOOU/kSK2vGAEAADMDAAATAAAAW0NvbnRlbnRfVHlwZXNdLnht"
}
Run Code Online (Sandbox Code Playgroud)
字符串文件比较长...
但是,当我尝试打开此文件时,在 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');
} );
Run Code Online (Sandbox Code Playgroud)
编辑:
这是“myfile”=> 的值
请,我需要帮助..
当我这样做时,Angular 不会出错,saveAs(blob, 'myfile.xlsx'); 但是如果我尝试打开文件,则会出错。
小智 5
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'});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2267 次 |
| 最近记录: |