使用ajax下载文件

时间:2014-04-26 09:00:47

标签: c# jquery ajax asp.net-mvc

我在表单上有一个提交按钮,当它被按下时,提交表单并在服务器硬盘驱动器上创建一个Excel文件(C:/ ExcelFiles)。

完成此操作后(在提交de form之后)我想使用Ajax下载此文件。

这就是我所做的,但它不起作用:

$(document).on('click', '#saveButton', function () {
$('#saveMessage').empty();
$('#saveMessage').append("<p>Your file has been stored in C:\\ExcelFiles</p>");
var data = $('#fileName').val();
alert(data);
$.ajax({
    type: 'POST',
    url: '/Calculation/Download',
    data: data,
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    success: function (returnValue) {
        window.location = '/Calculation/Download?fileName=' + returnValue;
    }
});
});

我的控制器动作如下所示:

    [HttpGet]
    public virtual ActionResult Download(string fileName)
    {
        string fullPath = Path.Combine(Server.MapPath("~/ExcelFiles"), fileName);
        return File(fullPath, "application/vnd.ms-excel", fileName);
    }

现在没有任何事情发生。我做错了什么?

1 个答案:

答案 0 :(得分:2)

您无法通过.ajax从服务器下载文件(出于安全原因)。 但是,您可以将浏览器指向该位置并下载该文件。 解决方案应该是这样的:

$(document).on('click', '#saveButton', function () {
    $('#saveMessage').empty();
    $('#saveMessage').append("<p>Your file has been stored in C:\\ExcelFiles</p>");
    var data = $('#fileName').val();
    window.location = '/Calculation/Download?fileName=' + data ;
});