我有一个下载附件的功能,可是当用迅雷下载时老是去下载那个页面,而不是下载那个附件。而Windows系统的下载却可以正确下载那个文件,这是怎么回事啊????下面是我的代码 string name = listAttachment.SelectedValue;//这是一个有多个附件的ListBox控件
string fullName = Server.MapPath("..\\..\\UpLoads\\" + name);
FileInfo fileInfo = new FileInfo(fullName); Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.AddHeader("Content-Disposition", "attachment;filename=" + name);
Response.AddHeader("Content-Length", fileInfo.Length.ToString());
Response.AddHeader("Content-Transfer-Encoding", "binary");
Response.ContentType = "application/octet-stream";
Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
Response.WriteFile(fileInfo.FullName);
Response.Flush();
Response.End();
string fullName = Server.MapPath("..\\..\\UpLoads\\" + name);
FileInfo fileInfo = new FileInfo(fullName); Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.AddHeader("Content-Disposition", "attachment;filename=" + name);
Response.AddHeader("Content-Length", fileInfo.Length.ToString());
Response.AddHeader("Content-Transfer-Encoding", "binary");
Response.ContentType = "application/octet-stream";
Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
Response.WriteFile(fileInfo.FullName);
Response.Flush();
Response.End();
也就是说,第一次请求你页面时,你配带的参数应该是用来说明是请求下载的
在这个过程里,如果你是动态生成文件的话,你在接受到这个参数后就应该去生成此文件,如一个报表等
然后重新定向一下你的页面,此时应当配带一个file的参数用来指向你文件的名称(如果不是动态生成的文件,就直接指向地址,不需要生成过程)
你再接受file参数的时候,把路径配带上,并输出下载
这样的好处是隐藏了文件的真实地址
当然不为了这个的话,你大可以直接把文件真实地址输出下载即可