2017-04-07 78 views
3

文件這是使POST請求與響應的xls文件我的服務的代碼:這是爲了處理Excel文件的響應如何正確下載的Excel與Angular2

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' })); 
    } 

。 這是代碼調用它:

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();   
    } 

但文件仍然保存爲一個已損壞。當使用郵差和捲曲它來確定。任何幫助,將不勝感激。

+0

您能告訴我們'exportData(data)'中的'data'嗎?只是想檢查'data'中的內容。 –

+0

這是對我工作:https://stackoverflow.com/questions/41771041/angular2-download-excel-file-from-web-api-file-is-corrupt/44680057#44680057 – Deepak

+0

[Angular2下載的可能的複製從Web API的Excel文件,文件已損壞](https://stackoverflow.com/questions/41771041/angular2-download-excel-file-from-web-api-file-is-corrupt) –

回答

8

responseType不應headers進行設置,這是其作爲第二個參數中post功能過去了,RequestOptionsArgs包含headersresponseType和其他RequestOptionsArgs對象的一部分,你可以閱讀更多關於它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, body,{ 
     headers: headers, 
     responseType: ResponseContentType.Blob 
    }).map(res => new Blob([res._body],{ type: 'application/vnd.ms-excel' })); 
} 
+1

我的塞爾維亞鄰居朋友! !你無法想象你在這篇文章中幫助過我多少!謝謝謝謝,再次感謝! –

+1

我這樣做:return this.http.post(endpoint,body,{responseType:ResponseContentType.Blob})。map( (res)=> { return res.blob() } );但是,我得到這個錯誤:「類型ResponseContentType.Blob是不能分配給輸入JSON」 ......任何想法? –

1

我寫this..it將是其他人誰正在尋找的文件下載功能角2解決方案的幫助。下面的一段代碼適用於我。

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, body,{ 
     headers: headers, 
     responseType: ResponseContentType.Blob}).map(res => new Blob([res.blob()],{ type: 'application/vnd.ms-excel' })); 
}