我想从FTP站点下载文件,点击下载时弹出下载对话框,但发现下载的文件和站点中的文件不一样,文件变长了,文件内容在原文件内容后还加上了一些东西,从内容上看是当前页面的aspx文件。请教各位高手,怎样规避这种现象啊?以下是我的代码:protected void OnLink(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "OnLink")
{
int index = Convert.ToInt32(e.CommandArgument); string serverUri = filesTable.Rows[index].ItemArray[0].ToString();
//使用FTP方式下载文件 int loc = serverUri.LastIndexOf("/");
if (loc <= 0)
{
return;
}
string downLoadFileName = serverUri.Substring(loc + 1); Response.Clear(); Response.ContentType = "application/octet-stream";
Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(downLoadFileName, System.Text.Encoding.UTF8)); if (serverUri != null)
{ byte[] _data; _data = this.LoadFromURL(serverUri); Response.BinaryWrite(_data); Response.Flush(); }
} } protected byte[] LoadFromURL(string url)
{ WebRequest wr = WebRequest.Create(url); byte[] result; byte[] buffer = new byte[4096]; using (WebResponse response = wr.GetResponse())
{ using (Stream responseStream = response.GetResponseStream())
{ using (MemoryStream ms = new MemoryStream())
{ int count = 0; do
{ count = responseStream.Read(buffer, 0, buffer.Length); ms.Write(buffer, 0, count); } while (count != 0); result = ms.ToArray(); } } } return result; } }
{
if (e.CommandName == "OnLink")
{
int index = Convert.ToInt32(e.CommandArgument); string serverUri = filesTable.Rows[index].ItemArray[0].ToString();
//使用FTP方式下载文件 int loc = serverUri.LastIndexOf("/");
if (loc <= 0)
{
return;
}
string downLoadFileName = serverUri.Substring(loc + 1); Response.Clear(); Response.ContentType = "application/octet-stream";
Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(downLoadFileName, System.Text.Encoding.UTF8)); if (serverUri != null)
{ byte[] _data; _data = this.LoadFromURL(serverUri); Response.BinaryWrite(_data); Response.Flush(); }
} } protected byte[] LoadFromURL(string url)
{ WebRequest wr = WebRequest.Create(url); byte[] result; byte[] buffer = new byte[4096]; using (WebResponse response = wr.GetResponse())
{ using (Stream responseStream = response.GetResponseStream())
{ using (MemoryStream ms = new MemoryStream())
{ int count = 0; do
{ count = responseStream.Read(buffer, 0, buffer.Length); ms.Write(buffer, 0, count); } while (count != 0); result = ms.ToArray(); } } } return result; } }
或者加上 Response.End()