从jquery下载具有现有路径的文件的最简单方法?

时间:2013-12-02 19:50:04

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

我浏览了十几页问题“如何从jQuery下载文件”,但仍未找到简单的解决方案。

我的jQuery里面有ajax:

$.ajax({
     url: "/Home/SaveQBMatter",
     type: "POST",
     data: JSON.stringify({ 'Matters': result, 'originalRecords': originalRecords, 'originalHours': originalHours, 'excludedHours': excludedHours, 'totalHours': totalHours }),
     dataType: "json",
     traditional: true,
     contentType: "application/json; charset=utf-8",
     success: function (data) {
           if (data.status == "Success") {
                var DownloadableFile = data.message;

                //HERE I NEED TO DOWNLOAD FILE

                alert("Success! You will be redirect to the Home Page.");
                var url = '@Url.Action("Index", "Home")';
                window.location.href = url;
           } else {
                alert("Error occurs on the Database level!");
           }
     },
     error: function () {
           alert("An error has occured!!!");
     }
});

此处data.message我正在回复行动SaveQBMatter完整文件路径

我需要的是让我的用户在重定向之前下载此文件。有什么帮助吗?

注意:如果需要此信息,我正在使用ASP.NET MVC

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

你可以这样做,在成功的ajax调用之后,执行location.href = data.message;正如你所说的data.message是文件的完整路径。有了它,它应该下载文件而不重定向浏览器。此外,当您下载文件时,请确保您具有标题强制下载。

您可以在此处查看有关强制下载的详情: http://www.symkat.com/force-download-with-http-headers

然后,做一个setTimeout让我们说1到2秒,你可以调整你喜欢的时间,让下载初始化和重定向。所以你的代码看起来像这样:

$.ajax({
     url: "/Home/SaveQBMatter",
     type: "POST",
     data: JSON.stringify({ 'Matters': result, 'originalRecords': originalRecords, 'originalHours': originalHours, 'excludedHours': excludedHours, 'totalHours': totalHours }),
     dataType: "json",
     traditional: true,
     contentType: "application/json; charset=utf-8",
     success: function (data) {
           if (data.status == "Success") {
                var DownloadableFile = data.message;

                location.href = DownloadableFile;

                setTimeout(function() {    
                    alert("Success! You will be redirect to the Home Page.");
                    var url = '@Url.Action("Index", "Home")';
                    window.location.href = url;
                }, 1000);
           } else {
                alert("Error occurs on the Database level!");
           }
     },
     error: function () {
           alert("An error has occured!!!");
     }
});

答案 2 :(得分:0)

如果用户浏览器未阻止,请尝试在新窗口中打开网址:

if (data.status == "Success") {
    window.open(data.message, "_blank")

如果您在打开文件时遇到问题而不是下载,可以尝试从ASP发送内容处置标头,如:

Content-Disposition: attachment; filename="filename.extension"