0

ファイル .aspx から Web ページにリダイレクトし、それを開いてファイルをダウンロードする必要があります。私のコードに従ってください:

ページ Source.aspx

<script runat="server">
      protected override void OnLoad(EventArgs e)
      {
          Response.Redirect("Dest.aspx?download=true");
          base.OnLoad(e);
      }
    </script>

ページ Dest.aspx

<script runat="server">

    private void Page_Load(object sender, System.EventArgs e)
    {
        string download= (string)Request.QueryString["download"];

        if (download == "true")
        {       
            string url = "myurl/myfile.exe";

            System.Net.HttpWebRequest objRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);
            System.Net.HttpWebResponse objResponse = (System.Net.HttpWebResponse)objRequest.GetResponse();
            int bufferSize = 1;

            Response.ClearHeaders();
            Response.ClearContent();
            Response.AppendHeader("content-disposition:", @"attachment;filename=""myFileName.exe""");
            Response.AppendHeader("Content-Length", objResponse.ContentLength.ToString());
            Response.ContentType = "application/download";

            byte[] byteBuffer = new byte[bufferSize + 1];
            System.IO.MemoryStream memStrm = new System.IO.MemoryStream(byteBuffer, true);
            System.IO.Stream strm = objRequest.GetResponse().GetResponseStream();
            byte[] bytes = new byte[bufferSize + 1];
            while (strm.Read(byteBuffer, 0, byteBuffer.Length) > 0)
            {
                Response.BinaryWrite(memStrm.ToArray());
                Response.Flush();
            }

            Response.Close();
            Response.End();
            memStrm.Close();
            memStrm.Dispose();
            strm.Dispose();
        }         
    }
</script>

現在2つの問題:

  1. ページ「Source.aspx」を呼び出すと、ダウンロードは自動的に開始されますが、ページ Dest.aspx はブラウザに表示されません

  2. ダウンロードしたファイルは、Response.AppendHeader("content-disposition:", @"attachment;filename=""myFileName.exe"""); で設定した "myFileName.exe" 広告ではなく、"Dest.aspx" と呼ばれます。

4

2 に答える 2

0

そうです、あなたがしなければならないことは、プロセスを 2 つに分割することです。

  1. ページを表示し、ヘッダーにリダイレクト値を設定して、ダウンロードに自動的にリダイレクトします。
  2. ファイルをダウンロードします。

注意すべき重要な点は、Web ページまたはファイルのいずれかで応答できるということです。両方を同時に応答することはできません。

于 2013-05-13T13:13:39.617 に答える
0

あなたの2番目の問題 問題 そのようなことを試してください

string attachment = string.Format(CultureInfo.InvariantCulture, "attachment; filename=" + sfilename + "", fi.Name); 
Response.ContentType = "application/octet-stream"; 
Response.AppendHeader("Content-Disposition", attachment);

それがうまくいくことを願っています。

于 2013-05-13T12:20:33.740 に答える