6

Web メソッドを使用してサーバーからファイルをダウンロードしようとしましたが、うまくいきません。以下の私のコード

     [System.Web.Services.WebMethod()]
public static string GetServerDateTime(string msg)
{
    String result = "Result : " + DateTime.Now.ToString() + " - From Server";
    System.IO.FileInfo file = new System.IO.FileInfo(System.Web.HttpContext.Current.Server.MapPath(System.Configuration.ConfigurationManager.AppSettings["FolderPath"].ToString()) + "\\" + "Default.aspx");
    System.Web.HttpResponse Response = System.Web.HttpContext.Current.Response;
    Response.ClearContent();
    Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
    Response.AddHeader("Content-Length", file.Length.ToString());
    Response.ContentType = "application/octet-stream";
    Response.WriteFile(file.FullName);
    //HttpContext.Current.ApplicationInstance.CompleteRequest();
    Response.Flush();
    Response.End();
    return result;        
}

私のajax呼び出しコードは以下の通りです

    <script type="text/javascript">
    function GetDateTime() {
                    var params = "{'msg':'From Client'}";
                    $.ajax
                      ({
                          type: "POST",
                          url: "Default.aspx/GetServerDateTime",
                          data: params,
                          contentType: "application/json;charset=utf-8",
                          dataType: "json",
                          success: function (result) {
                              alert(result.d);
                          },
                          error: function (err) {

                          }
                      });
    }
</script>

ボタンクリックでこの関数を呼び出しました..

他の方法でファイルをダウンロードする方法がわかりません

他の方法が利用可能かどうかを提案するか、同じコードで修正してください。

ありがとうございます..

4

3 に答える 3

10

WebMethod は現在の応答ストリームを制御できないため、この方法を実行することはできません。JavaScript から Web メソッドを呼び出した時点では、応答ストリームはすでにクライアントに配信されており、それに対してできることは何もありません。

これを行うためのオプションは、WebMethod がファイルをサーバー上のどこかに物理ファイルとして生成し、生成されたファイルへの URL を呼び出し元の JavaScript に返し、それwindow.open(...)を開くために使用することです。
物理ファイルを生成する代わりに、WebMethod で最初に試したことを実行する GenerateFile.aspx を呼び出すことができますが、それは で行い、javascript からPage_Load呼び出します 。window.open('GenerateFile.aspx?msg=From Clent')

于 2012-08-23T07:54:21.657 に答える
3

Web メソッドを呼び出す代わりに、汎用ハンドラー (.ashx ファイル) を使用し、ファイルをダウンロードするためのコードをハンドラーの ProcessRequest メソッドに配置することをお勧めします。

于 2012-08-24T10:09:19.880 に答える