使用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*/);