在angular 5中下载损坏的docx文件

在angular 5中下载损坏的docx文件,angular,Angular,我正在尝试下载来自数据库和后端的docx文件 BLOB是来自我的RESTAPI的base64字符串 我尝试使用其他文章/教程中的函数将它们转换回BLOB。我可以下载该文件,但当我试图在Word中打开它时,它说该文件已损坏 这是我的组件代码: export class ListComponent implements OnInit { files: {}; constructor( private fileService : CustomServ

我正在尝试下载来自数据库和后端的docx文件

BLOB是来自我的RESTAPI的base64字符串

我尝试使用其他文章/教程中的函数将它们转换回BLOB。我可以下载该文件,但当我试图在Word中打开它时,它说该文件已损坏

这是我的组件代码:

     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),