使用webapi和angularjs下载excel文件

我试图在webapi / angularjs应用程序中下载一个closedXml excel文件。

我使用以下命令从服务器上的webapi控制器返回数据:

HttpResponseMessage result = new HttpResponseMessage(); result = Request.CreateResponse(HttpStatusCode.OK); MemoryStream stream = GetStream(workbook); result.Content = new StreamContent(stream); result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.ms-excel"); result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = "Download.xlsx" }; return result; 

然后使用以下命令将其保存在客户端上:

 $scope.openExcel = function (data, status, headers, deferred) { var type = headers('Content-Type'); var disposition = headers('Content-Disposition'); if (disposition) { var match = disposition.match(/.*filename=\"?([^;\"]+)\"?.*/); if (match[1]) defaultFileName = match[1]; } defaultFileName = defaultFileName.replace(/[<>:"\/\\|?*]+/g, '_'); var blob = new Blob([data], { type: type }); saveAs(blob, defaultFileName); 

Excel表示文件的格式与扩展名指定的格式不同,然后无法正常打开。

在我工作的项目上,我制作了一个文件控制器(不是一个ApiController)

 public class FilesController : Controller { public FileResult GetFile(/*params*/) { // get fileBytes var contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; return base.File(fileBytes, contentType, "Download.xlsx"); } } 

然后从angular度,我打开这样的文件

 $window.open("/Files/GetFile/" /*+ params*/);