用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中返回,但是一旦它完成下载,它就会在内存中。

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

用jQuery下载并打开一个文件

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

如果你的方法是预取文件,然后向用户显示一个保存对话框,将文件放在他们的磁盘上,这是不可行的。

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