本帖最后由 南山牧童 于 2013-2-25 02:16 编辑
下载的代码在另一个页面用过,差不多,改了文件路径而已,但是在另一个页面好用,在这个页面不好用,是bug还是代码写的不对?????
图1
图1为文件列表,点击"下载"调用下面的代码进行下载
图2
点击下载后出现图2的错误
protected void gridFileMsList_RowCommand(object sender, GridCommandEventArgs e)
{
if (e.CommandName == "Download")
{
string FFileUrl = fm.ReadFiles(rmHtml.RemoveHtml(gridFileMsList.Rows[e.RowIndex].Values[0].ToString())).Rows[0]["FPath"].ToString();
//打开要下载的文件
FileStream r = new FileStream(FFileUrl, FileMode.Open);
//设置基本信息
Response.Buffer = false;
Response.AddHeader("Connection", "Keep-Alive");
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment;filename=" + Server.UrlEncode(Path.GetFileName(FFileUrl)));
Response.AddHeader("Content-Length", r.Length.ToString());
while (true)
{
//开辟缓冲区空间
byte[] buffer = new byte[1024];
//读取文件的数据
int leng = r.Read(buffer, 0, 1024);
if (leng == 0)//到文件尾,结束
break;
if (leng == 1024)//读出的文件数据长度等于缓冲区长度,直接将缓冲区数据写入
Response.BinaryWrite(buffer);
else
{
//读出文件数据比缓冲区小,重新定义缓冲区大小,只用于读取文件的最后一个数据块
byte[] b = new byte[leng];
for (int i = 0; i < leng; i++)
b = buffer;
Response.BinaryWrite(b);
}
}
r.Close();//关闭下载文件
Response.End();//结束文件下载
}
else if (e.CommandName == "Delete")
{
}
}
|