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

我通过浏览.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中正在返回数据,但是一旦完成下载,就会将其放在内存中。

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

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

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

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