带有发布请求的angular2下载文件

前端之家收集整理的这篇文章主要介绍了带有发布请求的angular2下载文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个按钮定义为:
  1. <button pButton type="button" label="Download" data-icon="fa-cloud-download" (click)="download()"></button>

下载方法委托给服务的地方,服务使用post方法调用api:

  1. download(model:GlobalModel) {
  2. let downloadURL = base + "rest/process/download";
  3. let body = JSON.stringify(model);
  4. let headers = new Headers({'Content-Type': 'application/json'});
  5. let options = new RequestOptions({headers: headers});
  6.  
  7. this.http.post('http://localhost:48080/rest/process/download',body,options)
  8. .toPromise()
  9. .then(
  10. response => {
  11. console.log(response);
  12. var mediaType = 'application/zip';
  13. var blob = new Blob([response.blob()],{type: mediaType});
  14. var filename = 'project.zip';
  15. saveAs(blob,filename);//FileSaver.js libray
  16. });
  17.  
  18. }

但到目前为止还没有实现blob()方法,并且还有其他使用_body的答案,但是有一个打字稿错误,比如“_body is private”.

浏览器显示下载窗口,但是当我下载文件时已损坏且无法打开它(我检查邮递员并且文件是从服务器生成的).

我怎样才能正确下载文件?…如果不可能,有可用的解决方法吗?

这是一个工作的例子
https://stackoverflow.com/a/42992377/3752172

将控制器修改为POST:

  1. [HttpPost("realisationsFilterExcel")]
  2. public FileResult exportExcell([FromBody] FilterRealisation filter)
  3. {
  4. var contentType = "application/octet-stream";
  5. HttpContext.Response.ContentType = contentType;
  6.  
  7. PaginationSet<RealisationReportviewmodel> itemsPage = _realisationRepository.GetRealisationReportFilter(filter,User);
  8.  
  9. RealisationsReportExcell reportExcell = new RealisationsReportExcell();
  10. var filedata = reportExcell.GetReport(itemsPage);
  11. FileContentResult result = new FileContentResult(filedata,contentType)
  12. {
  13. FileDownloadName = "report.xlsx"
  14. };
  15. return result;
  16. }

需要FileSaver作为dep:

  1. npm install file-saver --save
  2. npm install @types/file-saver --save

方法DownloadComponent angular2修改为POST

  1. @Input() filter: any;
  2.  
  3. public downloadFilePost() {
  4. this.http.post(this.api,this.filter,{ responseType: ResponseContentType.Blob })
  5. .subscribe(
  6. (response: any) => {
  7. let blob = response.blob();
  8. let filename = 'report.xlsx';
  9. FileSaver.saveAs(blob,filename);
  10. });
  11. }

运用

  1. <download-btn [filter]="myFilter" api="api/realisations/realisationsFilterExcel"></download-btn>

猜你在找的Angularjs相关文章