使用 Angular6 将 Excel Base 64 转换为 Excel
Convert Excel Base 64 to Excel with Angular6
我有一个 Springboot 服务,可以将 base64 格式的文件 (Excel) 发送到 Angular6。为了安全起见,我不能直接发送文件,所以,我首先将我的文件转换为 base64...
在我的 Angular 我可以接收到 base64 :
{
"file" : "UEsDBBQACAAIAJOOOU/kSK2vGAEAADMDAAATAAAAW0NvbnRlbnRfVHlwZXNdLnht"
}
字符串文件比较长...
然而,当我尝试打开这个文件时,我在 LibreOffice 中遇到错误,"corrupt file"
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" =>
的值
拜托,我需要帮助..
Angular 在我执行 saveAs(blob, 'myfile.xlsx');
时不会出错,但如果我尝试打开文件,我会出错。
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'});
}
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'});
}
我有一个 Springboot 服务,可以将 base64 格式的文件 (Excel) 发送到 Angular6。为了安全起见,我不能直接发送文件,所以,我首先将我的文件转换为 base64...
在我的 Angular 我可以接收到 base64 :
{
"file" : "UEsDBBQACAAIAJOOOU/kSK2vGAEAADMDAAATAAAAW0NvbnRlbnRfVHlwZXNdLnht"
}
字符串文件比较长...
然而,当我尝试打开这个文件时,我在 LibreOffice 中遇到错误,"corrupt file"
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" =>
的值拜托,我需要帮助..
Angular 在我执行 saveAs(blob, 'myfile.xlsx');
时不会出错,但如果我尝试打开文件,我会出错。
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'});
}
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'});
}