【问题标题】:Angular 2 save Excel FileAngular 2保存Excel文件
【发布时间】:2017-07-14 16:10:12
【问题描述】:

我正在尝试将 Excel 文件从我的服务器保存到客户端 PC,但它变得一团糟。

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

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

我想这很正常,因为 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 响应:

【问题讨论】:

标签: asp.net excel angular download


【解决方案1】:

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

【讨论】:

  • 感谢您为我所做的所有辛勤工作!谢谢大家的帮助!
  • 还有一些其他的迹象。响应的内容长度为 167 字节……对于电子表格来说太短了。当您查看 CSV 文件的响应标头时,事情已经分块传输编码。最初在响应标头中缺少。
猜你喜欢
  • 2017-06-14
  • 2019-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多