背景
我正在开发一个Web应用程序,其中经过身份验证的用户可以创建事件并发送该事件的邀请。如何使用AngularJS或JavaScript,如何通过ajax下载文件?
其中一个要求是我添加一个按钮,事件管理器可以点击该按钮以允许他/她下载发送的所有邀请的Excel/OOXML报告。
架构
的观点和实际按钮单击事件都生活在它运行在ASP.NET MVC 4并使用大多是普通的HTML和AngularJs作为平台的“网络”项目。
我也有一个BLL,DAL支持的API项目等API是.NET MVC的WebAPI,它是通过这个终端电子表格的提供者:
/// <summary>GET api/ExportInvitations/{id}</summary>
/// <summary>Gets an OOXML invitation report by event id.</summary>
public HttpResponseMessage Get(int id)
{
var wb = Invitation.ConstructInvitationSpreadsheet(id);
var result = new HttpResponseMessage(HttpStatusCode.OK);
var stream = new MemoryStream();
wb.SaveAs(stream);
result.Content = new StreamContent(stream);
result.Content.Headers.ContentType =
new MediaTypeHeaderValue("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = "HelloWorld.xlsx" };
return result;
}
在前端,我用这AngularJS脚本来调用构造并返回电子表格中的API端点(我总结为简便起见,此代码):
$http.get('/api/ExportInvitations/' + id).success(function(data) {
//do stuff
});
的问题
一切似乎都很好,直到用户应该看到电子表格作为下载出现在浏览器中。对API的ajax调用没有问题,并且API返回一个电子表格,因为它应该 - 我从来没有看到该文件在浏览器底部显示为下载(我正在使用Chrome)。
任何帮助表示赞赏。