导航

强制提示下载文件

Posted on 2007-12-26 15:47  Saga  阅读(174)  评论(0)    收藏  举报

对于大文件的输出  
  不要使用Response.WriteFile  
  你的内存会被耗尽的  
   
  string filePath = "xxxx.pdf";
            string FullFileName = Server.MapPath(filePath);
            if (File.Exists(FullFileName))
            {
                Response.ContentType = "application/octet-stream";
                Response.AppendHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(filePath, System.Text.Encoding.UTF8));
                BinaryReader br = new BinaryReader(File.OpenRead(FullFileName));
                BinaryWriter bw = new BinaryWriter(Response.OutputStream);
                byte[] buffer = new byte[1024];
                int i = 1024;
                while (i == 1024)
                {
                    i = br.Read(buffer, 0, i);
                    bw.Write(buffer, 0, i);
                }
                br.Close();
                bw.Close();
                return;
            }

文件不大的情况下可以用WRITEFILE方法
string FileName = "xxxx.pdf";
            string FullFileName = Server.MapPath(FileName);     //FileName--要下载的文件名
            FileInfo DownloadFile = new FileInfo(FullFileName);
            if (DownloadFile.Exists)
            {
                Response.Clear();
                Response.ClearHeaders();
                Response.Buffer = false;
                Response.ContentType = "application/octet-stream ";
                Response.AppendHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8));
                Response.WriteFile(DownloadFile.FullName);
                Response.Flush();

                Response.End();
            }
            else
            {
                //文件不存在
            }