如何使用Angular2正确下载excel文件
发布时间:2020-12-17 18:00:33 所属栏目:安全 来源:网络整理
导读:这是我的服务代码,它通过响应xls文件发出post请求: exportInternalOrder(body) { let user_token: string = this.sessionService.getToken(); let headers = new Headers(); headers.append('responseType','arraybuffer'); headers.append('Authorization'
这是我的服务代码,它通过响应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' })); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |