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