【问题标题】:Saving Blob as xlsx in Angular2在Angular2中将Blob保存为xlsx
【发布时间】:2016-08-14 15:27:25
【问题描述】:

在我的 Angular2 应用中保存 xlsx 时遇到一些问题:

this._http.get('/api/file).subscribe(success=>{
                var blob = new Blob([success.json()], {
                    type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
                });
                var downloadUrl= window.URL.createObjectURL(blob);
                window.open(downloadUrl);

            }, error=>{

            });

我从后端收到的响应格式如下:

PK�q�H_rels/.rels���j�0��}
�{㴃1F�^Ơ�2��l%1I,c�[��3�l
l�����H��4��R�l��·����q}*�2�������;�*��
t"�^�l;1W)�N�iD)ejuD�cKz[׷:}g����@:�.... etc

有什么想法我做错了吗?

【问题讨论】:

    标签: angular blob


    【解决方案1】:

    问题是不支持开箱即用的二进制响应内容。您需要“手动”在底层 XHR 对象上设置响应类型

    作为一种解决方法,您需要如下所述扩展 Angular2 的 BrowserXhr 类,以便在底层 xhr 对象上将 responseType 设置为 blob

    import {Injectable} from 'angular2/core';
    import {BrowserXhr} from 'angular2/http';
    
    @Injectable()
    export class CustomBrowserXhr extends BrowserXhr {
      constructor() {}
      build(): any {
        let xhr = super.build();
        xhr.responseType = "blob";
        return <any>(xhr);
      }
    }
    

    在提供程序中注册此类时要小心,因为它是全局的。您应该只在执行请求的组件中设置它。在您的情况下,您将获得响应数据的字符串表示形式...

    @Component({
      (...)
      providers: [
        provide(BrowserXhr, { useClass: CustomBrowserXhr })
      ]
    })
    export class ...
    

    然后你需要从响应对象的_body 属性中获取数据。您应该正常使用,因为它是内部的,但目前没有其他方法:

    this._http.get('/api/file).subscribe(success => {
      var blob = new Blob([success._body], {
                   type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
      });
      var downloadUrl= window.URL.createObjectURL(blob);
      window.open(downloadUrl);
    }, error=>{
      (...)
    });
    

    查看这个问题了解更多详情:

    【讨论】:

    • 太好了!我正在测试,我会告诉你进展如何
    • 它可以工作,但它不适用于当前的 angular2 版本。 _body 现在是私有的,但您可以使用 success['_body'] 访问它。
    猜你喜欢
    • 2021-09-20
    • 2016-05-01
    • 2018-06-11
    • 1970-01-01
    • 2014-06-27
    • 2020-03-03
    • 2017-04-15
    • 2019-02-02
    • 2012-01-11
    相关资源
    最近更新 更多