如何使用Angular2正确下载excel文件

前端之家收集整理的这篇文章主要介绍了如何使用Angular2正确下载excel文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这是我的服务代码,它通过响应xls文件发出post请求:

exportInternalOrder(body) {
        let user_token: string = this.sessionService.getToken();
        let headers = new Headers();
        headers.append('responseType','arraybuffer');
        headers.append('Authorization','Bearer ' + user_token);
        return this.http.post(this.config.exportInternalOrder,body,{
            headers: headers
        }).map(res => new Blob([res._body],{ type: 'application/vnd.ms-excel' }));
    }

应该处理excel文件的响应.
这是调用它的代码

let objToSend = this.makeObjToSend(false);
this.reportingService.exportExcel(objToSend)
    .subscribe(
        data => {
            this.exportData(data);
        },error => {
            this.errorFilterMsg.push({ severity: 'error',detail: 'Report exporting has Failed!' });
        }
);

这是文件的保存(由于某种原因,window.open什么都不做):

exportData(data){       
        let blob = data;
        let a = document.createElement("a");
        a.href = URL.createObjectURL(blob);
        a.download = 'fileName.xls';
        document.body.appendChild(a);
        a.click();        
    }

但该文件仍然保存为损坏的文件.使用邮差和卷曲时,它就可以了.任何帮助,将不胜感激.

解决方法

responseType不应该在头文件中设置,它是RequestOptionsArgs对象的一部分,它在post函数中作为第二个参数传递,RequestOptionsArgs包含头文件,responseType和其他,你可以阅读更多关于它的内容 here.所以,你的代码应该如下所示:

import { ResponseContentType } from '@angular/http';

exportInternalOrder(body) {
    let user_token: string = this.sessionService.getToken();
    let headers = new Headers();
    headers.append('Authorization','Bearer ' + user_token);
    return this.http.post(this.config.exportInternalOrder,{
        headers: headers,responseType: ResponseContentType.Blob
    }).map(res => new Blob([res._body],{ type: 'application/vnd.ms-excel' }));
}

猜你在找的Angularjs相关文章