Angular 2保存Excel文件

时间:2017-07-14 16:10:13

标签: asp.net excel angular download

我试图将Excel文件从我的服务器保存到客户端电脑,但它搞得一团糟。

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

  

��ࡱ�>��&����

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

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响应:

enter image description here

1 个答案:

答案 0 :(得分:2)

您必须将包含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()); 
}