2016-09-16 60 views
1

我想下载webapi/angularjs应用程序中的closedXml excel文件。使用webapi和angularjs下载excel文件

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; 

使用和储存,然后在客户端上:

我是从的WebAPI控制器的服务器上使用返回数据

$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中说,该文件是在不同的格式比扩展名指定的格式,然后不能正常打开。

回答

0

在我工作的项目,我做了一个文件控制器(不是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"); 
    } 
} 

,然后从棱角分明,我开这样的

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