Откройте веб-страницу, затем загрузите файл C #

Из файла .aspx мне нужно перенаправить на веб-страницу, открыть ее и загрузить файл. Следуя моему коду:

страница 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>

Теперь две проблемы:

  1. При вызове страницы "Source.aspx" загрузка начинается автоматически, но страница Dest.aspx не отображается в браузере.

  2. Загруженный файл называется "Dest.aspx" вместо рекламы "myFileName.exe", которую я установил с помощью Response.AppendHeader ("content-disposition:", @ "attachment; filename =" "myFileName.exe" "");


person user2377447    schedule 13.05.2013    source источник
comment
Почему вы пытаетесь перенаправить на вторую страницу, вы можете просто загрузить файл в первом OnLoad событии. Странно иметь script runat="server">, который загружает файл на компьютер пользователя.   -  person Security Hound    schedule 13.05.2013
comment
@Rahul Спасибо, решите вторую проблему.   -  person user2377447    schedule 13.05.2013
comment
@Ramhound Использование OnLoad вместо PageLoad не решает мою первую проблему. файл загружен, но страница и ее содержимое не отображаются. Я хочу отобразить страницу, а затем позволить загрузке файла.   -  person user2377447    schedule 13.05.2013


Ответы (2)


Для вашей второй проблемы Проблема Попробуйте что-нибудь в этом роде

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

Надеюсь, это сработает для вас.

person Rahul    schedule 13.05.2013
comment
Нет, только вторая проблема .. Первая проблема осталась. Есть ли способ проверить, полностью ли загружена веб-страница, прежде чем запускать код для загрузки файла? - person user2377447; 13.05.2013
comment
необходимо ли загружать файл при загрузке страницы, означает, что на Dest.aspx странице вы можете использовать любую button, которая говорит download file что-то подобное ,, которая загрузит файл, и ваша страница также будет отображаться. - person Rahul; 13.05.2013
comment
означает, что вы также можете вызвать функцию загрузки из события нажатия кнопки на Dest.aspx - person Rahul; 13.05.2013
comment
убедитесь, что ваша веб-страница полностью загружена, вы можете использовать событие LoadComplete страницы, просто попробуйте это stackoverflow.com/questions/8587555/ - person Rahul; 13.05.2013
comment
Я пытаюсь следовать инструкциям по ссылке о PageLoad_Complete, но функция загрузки файла продолжает запускаться, а страница не загружается, может быть, в моем коде что-то не так с загрузкой? - person user2377447; 13.05.2013
comment
необходимо ли вызывать функцию загрузки из загрузки страницы, вы можете использовать дополнительную кнопку на Dest.aspx странице и вызывать функцию загрузки из ее события щелчка .. - person Rahul; 13.05.2013

Правильно, вам нужно разделить процесс на две части:

  1. Отобразите свою страницу и установите значение перенаправления в заголовке для автоматического перенаправления на вашу загрузку.
  2. загрузите ваш файл.

Важно отметить, что вы можете ответить либо веб-страницей, либо файлом, но не обоими сразу.

person Captain Kenpachi    schedule 13.05.2013