in

SDT Community Server

SDT Forums, Blogs, Photos server.

wego

ASP.NET Download Web File

今天写了个 DownloadWebFile 函数,  采用 读取 --> 输出 方式.  但发现当第二次打开 Download 的文件时, 文件报已损坏错误. code 如下:

protected void DownloadFile(string url)
  {
   System.Net.HttpWebRequest Myrq = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(url); 
   System.Net.HttpWebResponse myrp = (System.Net.HttpWebResponse)Myrq.GetResponse();
   Stream respStream = myrp.GetResponseStream();

   Response.Expires = 0;
   Response.Clear();

   Response.ContentType = myrp.ContentType;

   const int BUFFER_SIZE = 16*1024;
   byte[] buffer = new byte[BUFFER_SIZE];
   int length;   
   
   length = respStream.Read(buffer, 0, BUFFER_SIZE);
   while(length > 0)
   {
      Response.BinaryWrite(buffer);   
      length = respStream.Read(buffer, 0, BUFFER_SIZE);
   }

   Response.AddHeader("content-disposition", String.Format("attachment;filename={0}", "Competitor's list.xls"));
   Response.AddHeader("pragma", "no-cache");
   Response.AddHeader("expires", "0");
   Response.AddHeader("cache-control", "must-revalidate, post-check=0, pre-check=0");   

   Response.Flush();
   Response.End();   
  }

 后在 Wicky 同志的帮助下,  采用 读取 --> 中传站存放 -> 输出 方式得已解决 !

protected void DownloadFile(string url)
  {
   System.Net.HttpWebRequest Myrq = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(url); 
   System.Net.HttpWebResponse myrp = (System.Net.HttpWebResponse)Myrq.GetResponse();
   Stream respStream = myrp.GetResponseStream();

   Response.Expires = 0;
   Response.Clear();

   Response.ContentType = myrp.ContentType;

   const int BUFFER_SIZE = 16*1024;
   byte[] buffer = new byte[BUFFER_SIZE];
   int length;   
   
   MemoryStream ms = new MemoryStream();
   
   length = respStream.Read(buffer, 0, BUFFER_SIZE);
   while(length > 0)
   {
      ms.Write(buffer, 0, length);
      length = respStream.Read(buffer, 0, BUFFER_SIZE);
   }

   Response.AddHeader("content-disposition", String.Format("attachment;filename={0}", "Competitor's list.xls"));
   Response.AddHeader("pragma", "no-cache");
   Response.AddHeader("expires", "0");
   Response.AddHeader("cache-control", "must-revalidate, post-check=0, pre-check=0");   

   Response.BinaryWrite(ms.GetBuffer());

   Response.Flush();
   Response.End();   
  }

 

 

 

Comments

No Comments
Copyright SDT, 2006-2009. All rights reserved.