用jQuery下载并打开一个文件
本文关键字:一个 文件 jQuery 下载 | 更新日期: 2023-09-27 18:04:57
我通过.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中返回,但是一旦它完成下载,它就会在内存中。
在收到文件下载数据后,我如何在浏览器端触发保存文件对话框?
必须通过保存对话框启动下载,以便用户能够将其放在磁盘上。
如果你的方法是预取文件,然后向用户显示一个保存对话框,将文件放在他们的磁盘上,这是不可行的。
但是,您可以通过调用通过ajax下载文件(您现在正在做的事情),在发送内容时提供响应缓存头,然后为与ajax调用中的URL完全相同的URL弹出下载对话框(例如通过iframe),从而使用户看起来像是即时的。这将使浏览器将文件从缓存(在AJAX调用完成时创建)保存到用户的磁盘。