在angular 5中下载损坏的docx文件
我正在尝试下载来自数据库和后端的docx文件 BLOB是来自我的RESTAPI的base64字符串 我尝试使用其他文章/教程中的函数将它们转换回BLOB。我可以下载该文件,但当我试图在Word中打开它时,它说该文件已损坏 这是我的组件代码:在angular 5中下载损坏的docx文件,angular,Angular,我正在尝试下载来自数据库和后端的docx文件 BLOB是来自我的RESTAPI的base64字符串 我尝试使用其他文章/教程中的函数将它们转换回BLOB。我可以下载该文件,但当我试图在Word中打开它时,它说该文件已损坏 这是我的组件代码: export class ListComponent implements OnInit { files: {}; constructor( private fileService : CustomServ
export class ListComponent implements OnInit {
files: {};
constructor( private fileService : CustomService) { }
ngOnInit() {
this.fileService.getAllFiles().subscribe(
data => {
this.files = data;
},
error => console.log(error)
)
}
saveData = (function () {
var a = document.createElement("a");
document.body.appendChild(a);
// a.style = "display: none";
return function (data, fileName) {
var json = JSON.stringify(data),
blob = new Blob([json], {type: "octet/stream"}),
url = window.URL.createObjectURL(blob);
a.href = url;
a.download = fileName;
a.click();
window.URL.revokeObjectURL(url);
};
}());
在html中,我使用:
<li *ngFor="let file of files">
<a target="_self" download="{{file.file_name}}" (click)="saveData(file.upload_file,file.file_name )">{{file.file_name}}</a>
</li>
您需要解码base64数据 创建一个采用解码字符串形式的函数,并将其转换为blob,如下所示:
base64toBlob(byteString) {
var ia = new Uint8Array(byteString.length);
for (var i = 0; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i);
}
return new Blob([ia], { type: "octet/stream" });
}
剩下的代码应该可以工作
您需要解码base64数据 创建一个采用解码字符串形式的函数,并将其转换为blob,如下所示:
base64toBlob(byteString) {
var ia = new Uint8Array(byteString.length);
for (var i = 0; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i);
}
return new Blob([ia], { type: "octet/stream" });
}
剩下的代码应该可以工作
我无法想象您想要
字符串化数据,这将创建一个JSON字符串。。。数据是什么样子的?你能发布JSON吗?另外,saveData
函数返回一个函数,并且它本身不接受任何参数,因此您可能还需要更改(单击)绑定。显然,当我尝试解码时,“CUPRINS”的base64值不是有效的base64。我得到要解码的字符串没有正确编码。
我没有发布整个字符串。在文章中。所以你是对的。我会更新它。我无法想象你想要字符串化数据,这将创建一个JSON字符串。。。数据是什么样子的?你能发布JSON吗?另外,saveData
函数返回一个函数,并且它本身不接受任何参数,因此您可能还需要更改(单击)绑定。显然,当我尝试解码时,“CUPRINS”的base64值不是有效的base64。我得到要解码的字符串没有正确编码。
我没有发布整个字符串。在文章中。所以你是对的。我会更新它。
var json = atob(data),
blob = this.base64toBlob(json),