今天写了个 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();
}