それは私が2日前に自分自身に尋ねたのと同じ質問です。ExtJSを使用して作成されたクライアントを使用したプロジェクトがあり、サーバー側の実現はASP.Netで行われました。サーバー側をJavaに変換する必要があります。クライアントからのAjaxリクエストの後にサーバーが生成するXMLファイルをダウンロードする機能がありました。Ajaxリクエストの後でファイルをダウンロードして、メモリに保存するだけでは不可能であることは誰もが知っています。しかし...元のアプリケーションブラウザでは、オプションを開いて保存し、ダウンロードをキャンセルする通常のダイアログが表示されます。ASP.Netはどういうわけか標準の動作を変更しました...再度証明するのに2日かかります-通常の方法でファイルをダウンロードする方法はありません...唯一の例外は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から呼び出されました。それが魔法です。私にとっては、サーブレットと非表示のiframeで終了しました...