使用webapi和angularjs下载excel文件

时间:2016-09-16 15:09:02

标签: c# angularjs excel asp.net-web-api closedxml

我试图在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表示文件的格式与扩展程序指定的格式不同,然后无法正常打开。

1 个答案:

答案 0 :(得分:0)

在我工作的项目上,我为文件制作了一个Controller(不是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*/);