如何下载 Angular 中的 Int8Array 文件 (blob)

How to dowload a file (blob) which is Int8Array in Angular

我正在尝试下载 Angular 中的文件。该文件作为 varbinary 保存在 db 中。 Java REST 服务将其作为 byte[] 获取。我将它作为 Angular 中的 Int8Array。但是,当我下载它时,我相信它是 base64 编码的

      const link = document.createElement( 'a' );
      link.style.display = 'none';
      document.body.appendChild( link );

      const blob = new Blob([myFileByteArray], {type: 'text/xlsx'});  //myFile is Int8Array 
      const objectURL = URL.createObjectURL(blob); 
    
      link.href = objectURL;
      link.href = URL.createObjectURL(blob);
      link.download =  this.myfile.name;
      link.click();

在 MS 中是这样的SQL:0x323032312D30392D323720303 ... 这就是我下载这个 xlsx 并打开它时的样子:MjAyMS0wOS0yNyAwNzozMDsxMi4wODI7bT

我相信它是在从 sql 到浏览器的那条路径中的某处进行了 base64 编码...我将它保存在 SQL 中,就像这样 'CAST('this is my xslx' AS VARBINARY (MAX)) 所以我知道它应该是这样的文字.

解决方案是将 Angular 中的类型从 Int8Array 更改为字符串,然后我可以使用 atob() 方法从 base64 解码。我只是不知道为什么它在base64中。难道是因为我用了Spring Boot ResponseEntity ...

      this.myFile= this.myFileResultSet.result;
      let myFileByteArray = this.myFile.myFileBytes //before Int8Array, now String
      console.log(myFileByteArray);

      let myFileDecoded = atob(myFileByteArray); // must be string not Int8Array to be able to 
                                                     // convert it from base64 
      const link = document.createElement( 'a' );
      link.style.display = 'none';
      document.body.appendChild( link );

      const blob = new Blob([myFileDecoded], {type: 'text/csv'});
      const objectURL = URL.createObjectURL(blob); 
    
      link.href = objectURL;
      link.href = URL.createObjectURL(blob);
      link.download =  this.myFile.name;
      link.click();
    });