0
我试图用jquery的$ .post方法下载一个excel CSV文件,但我很难让它工作。使用jquery post MVC下载文件
我可以看到服务器正在创建文件并将其发送回客户端,但在此之后,我无法获取文件实际下载。
我的jQuery的岗位职能如下:
$.post("/GenerateFile", { id: id, startDate: startDate, endDate: endDate }, function (data) {
window.location = data;
}).fail(function (XMLHttpRequest, textStatus, errorThrown) {
});
而我的服务器端功能如下:
public async Task<ActionResult> GenerateFile(string id, string startDate, string endDate)
{
try
{
// My logic to create the file here, this is of type Task<MemoryStream>
var outputFile = await CreateFile(sDate, eDate);
return File(outputFile, "text/comma-separated-values", "Download.csv");
}
catch (Exception e)
{
return new HttpStatusCodeResult(400, e.Message);
}
}
当这个数据来自返回给客户端,它会尝试导航到一个使用来自CSV文件的数据的新页面(如可在URL链接中看到的)与消息
Bad Request - Invalid URL
HTTP Error 400. The request URL is invalid.
文件生成本身没有问题,因为我可以在磁盘上本地创建文件,这只是当我尝试使用浏览器下载文件时。
我见过指导,显示此方法工作,但似乎有什么,我错过了停止下载工作。
感谢您的回答,我确信我可以使用window.location下载它,但它似乎并没有像我想的那样工作(在试图找出几个小时=。=之后)。无论如何,而不是在服务器上创建一个文件,我将该值存储在会话中(按照本指南 - http://stackoverflow.com/questions/14138872/how-to-use-sessions-in-an-asp-net -mvc-4-application)并且现在可以完美下载。 – Hanho
假设您只需将整个文件作为编码字符串传递,则“window.location”的大小限制非常小,因此永远不会实用。虽然会话*将会*工作,但实际上不推荐用于大型数据项目,并且在多个服务器上肯定不会很好地工作(例如,一个实际的生产环境中最少有2个服务器实例) –
啊,对了,谢谢你的支持,当我们谈论大数据项时,我们会谈论大吗?超过1兆? 5 megs? 100megs?另外,您能否简要概述一下服务器实例的含义? (或关于这个的链接?) – Hanho