从MVC 5控制器流式传输Excel文件到浏览器。

10 浏览
0 Comments

从MVC 5控制器流式传输Excel文件到浏览器。

我正在尝试从MVC 5控制器中流式传输输出,并且在让浏览器(IE 10、11、Chrome)识别输出流并导入到Excel方面遇到了麻烦。我通过将输出保存到文件并打开它来验证流是否是一个有效的Excel文件。我使用Fiddler确定头和数据看起来都没问题(见下文)。控制器是由下面列出的jQuery ajax调用调用的。被调用的Controller方法也列在下面。ajax返回的状态通过错误函数返回,req.status = 200(OK),但status = 'parseerror'。任何帮助将不胜感激。

HomeController.cs:

[AcceptVerbs(HttpVerbs.Post)]
public FileStreamResult Save(string document)
{
    document = document.Trim();
    byte[] bytefile = Export.Excel.ProcessExport.ExportFile(document);
    var stream = new MemoryStream(bytefile);
    return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", document + DateTime.Now.ToString("yyyy-MM-dd-hh-mm-ss") + ".xlsx");
}

Fiddler输出:

HTTP/1.1 200 OK
Cache-Control: private
Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
Server: Microsoft-IIS/8.0
X-AspNetMvc-Version: 5.2
Content-Disposition: attachment; filename=test2015-04-03-06-52-04.xlsx
X-AspNet-Version: 4.0.30319
X-SourceFiles: =?UTF-8?B?RDpcTFJQXFJvb3QtREVWXFNjZW5hcmlvXFNjZW5hcmlvXEhvbWVcU2F2ZQ==?=
X-Powered-By: ASP.NET
Date: Fri, 03 Apr 2015 13:52:04 GMT
Content-Length: 9779
PK    6 F H  

EDIT: 我意识到ajax调用正在接收所有数据,所以我现在想知道如何只调用控制器并传递参数。

0
0 Comments

问题原因:通过jQuery ajax调用不适用于下载文件,因此无法实现从MVC 5 Controller流式传输Excel文件到浏览器。

解决方法:可以使用jquery.fileDownload插件来实现与问题相同的行为,即从MVC Controller异步返回Excel文件。

0