在jQuery中下载并打开一个文件

时间:2011-08-09 01:47:42

标签: c# jquery asp.net ajax

我通过浏览.aspx页面下载文件并返回文件

HttpContext.Current.Response.ContentType = "APPLICATION/OCTET-STREAM";
String Header = "Attachment; Filename=" + sFileName;
HttpContext.Current.Response.AppendHeader("Content-Disposition", Header);
FileInfo Dfile = new FileInfo(HttpContext.Current.Server.MapPath(sFilePath));
HttpContext.Current.Response.WriteFile(Dfile.FullName);
HttpContext.Current.Response.End();

那没关系。

我希望能够通过使用jQuery的异步ajax调用来做到这一点,这样在下载文件时,用户会看到一个gif微调器动画。

$("#showbusy").fadeIn();
$.ajax({ async : true, type: "GET", url: "download.aspx",
        contentType: "application/text; charset=utf-8",
        success: function (data) {
            $("#showbusy").hide();
        },
        error: function (xmlHttpRequest, textStatus, errorThrown) {
            $("#showbusy").hide();
        }
    });

如果我直接转到.aspx页面下载文件,但由于某种原因,这是通过对此页面执行ajax调用而无法正常工作的。我可以看到Firebug中正在返回数据,但是一旦完成下载,就会将其放在内存中。

如何在收到文件下载数据后在浏览器端实际触发保存文件对话框?

1 个答案:

答案 0 :(得分:0)

必须通过保存对话框启动下载,以便用户能够将其放在磁盘上。

如果您的方法是预先获取文件,然后向用户显示一个保存对话框,将文件放在磁盘上的某个位置,则无法通过javascript实现。

但是,您可能能够通过ajax(您现在正在做的事情)调用下载文件,使用户看起来很快,在发送时提供响应缓存标头内容,然后弹出下载对话框(例如通过iframe),以获得与AJAX调用中完全相同的URL。这将使浏览器将文件从其缓存(在完成AJAX调用时创建)保存到用户的磁盘。