Angular 2保存Excel文件

我试图从我的服务器保存一个Excel文件到客户端PC,但它搞砸了。

当我向服务器请求我的文件时,请求的正文如下所示:

ࡱ > &

我想这是正常的,因为excel是二进制格式。 我正在使用文件保护程序插件来保存我的文件,目前我有CSV和ASCII文件运行良好。 这是我的function下载:

downloadFile(filePath: string, name: string): void{ this.dataImportService.downloadFile(filePath) .then(data => { this.headers = data.headers; let content = this.headers.get('content-type'); var blob = new Blob([data._body], { type: content }); importedSaveAs(blob, name); }); } 

任何我做错了或我可以改进的东西? 预先感谢您的帮助。

编辑:这是我的服务器代码:

 [HttpGet] public void downloadFile(string path) { try { string extension = Path.GetExtension(path); string fileName = Path.GetFileName(path); HttpResponse response = System.Web.HttpContext.Current.Response; response.AppendHeader("Content-Disposition", "attachment; filename="+fileName); response.AddHeader("Content-Type", Utils.MimeTypesConverter.GetMimeType(extension)); response.TransmitFile(path); Response.End(); } catch (Exception ex) { Response.Write(ex.Message); return; } } 

和我的dataImportService.ts

 downloadFile(filePath: string): any{ return this.http.get(SERVICE_URL + 'DataImport/downloadFile?path=' + filePath) .toPromise() .then(response =>{ return response; }) .catch(this.handleError); } 

我从服务器的http响应:

在这里输入图像说明

您必须将包含HTTP头的响应映射到Blob上。 因此,将代码更改为具有映射的Observable以转换响应。

 downloadFile(filePath: string): Observable<any> { return this.http.get( `${SERVICE_URL}DataImport/downloadFile?path=${filePath}`, {responseType: ResponseContentType.Blob } ) .map(res:Response => res.blob()); }