这是我两天前问自己的同一个问题。有一个项目,客户端使用 ExtJS 编写,服务器端实现在 ASP.Net 上。我必须将服务器端翻译成 Java。有一个下载 XML 文件的功能,该文件是服务器在客户端发出 Ajax 请求后生成的。我们都知道,Ajax 请求后不可能下载文件,只是存储在内存中。但是...在原始应用程序浏览器中显示通常的对话框,其中包含打开、保存和取消下载的选项。ASP.Net 以某种方式改变了标准行为......我花了两天时间再次证明 - 没有办法通过通常的方式请求下载文件......唯一的例外是 ASP.Net......这里是 ASP.Net代码
public static void WriteFileToResponse(byte[] fileData, string fileName)
{
var response = HttpContext.Current.Response;
var returnFilename = Path.GetFileName(fileName);
var headerValue = String.Format("attachment; filename={0}",
HttpUtility.UrlPathEncode(
String.IsNullOrEmpty(returnFilename)
? "attachment" : returnFilename));
response.AddHeader("content-disposition", headerValue);
response.ContentType = "application/octet-stream";
response.AddHeader("Pragma", "public");
var utf8 = Encoding.UTF8;
response.Charset = utf8.HeaderName;
response.ContentEncoding = utf8;
response.Flush();
response.BinaryWrite(fileData);
response.Flush();
response.Close();
}
这个方法是从 WebMethod 调用的,而 WebMethod 又是从 ExtJS.Ajax.request 调用的。这就是魔法。对我来说是什么,我以 servlet 和隐藏的 iframe 结束......