这与我两天前问自己的问题相同。有一个客户端使用 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 ......