这是我做过的一个下载页面,不会另打开一个页面,也不会刷新,它用Response.Write直接向前台输出二进制。
源文件代码在这里,你应该看得懂吧。需要的命名空间,请你在VS的智能提示下补充上去。
string strPhyPath = Server.MapPath("~/")+ fileurl;//fileurl是文件的相对地址
if (File.Exists(strPhyPath))
{
//取文件大小
FileStream MyFileStream;
uint FileSize1;
MyFileStream = new FileStream(strPhyPath, FileMode.Open, FileAccess.Read, FileShare.None);
int iConverTemp = Convert.ToInt32(MyFileStream.Length);
FileSize1 = (uint)(iConverTemp);
MyFileStream.Close();
//存在,下载
Page.Response.ContentType = "APPLICATION/OCTET-STREAM";
Page.Response.AddHeader("Content-length", FileSize1.ToString());//下载文件长度
Page.Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(strPhyPath, System.Text.Encoding.UTF8));
Page.Response.WriteFile(strPhyPath);
Response.Flush();
Response.End();
}
else
{
this.Alert("文件不存在,请及时向管理员反馈!");//Alert是我自定义定义的方法
}