网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > ASP.NET技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.aspnet_wp.exe could not be sta.
.一个读取扩展名为xml的资源文件的.
.关于EXCEL数据上传到SQL SERVER中.
.asp.net2.0中关于ASP.NET 网站管.
.全角字符转换为半角.
.ASP.NET 1.1 没有出现在 IIS 6.0.
.ASP.Net环境下使用Jmail组件发送.
.Lucene.net试用.
.ASP.NET极限:页面导航 (翻译).
.如何制作winform得启动画面.
.投票结果的图片进度条显示.
.ASP.NET服务器控件PleaseWaitBut.
.sql2005的xml字段类型在.net中的.
.此方法用于确认用户输入的不是恶.
.将输入的20041219等的数字字符串.
.在.NET框架应用程序中发送电子邮.
.在Web DataGrid中当鼠标移到某行.
.使用ASP.Net Forms模式实现WebSe.
.ASP.net 页面被关闭后,服务器端.
.在ASP.NET Atlas中调用Web Servi.

下载文件关闭窗体之解决方法

发表日期:2006-10-26


对于下载时新打开一窗口下载,下载完后需要关闭的
一种:对于较小文件可以有效:
System.IO.FileInfo file = new System.IO.FileInfo("F:\\mp3\\mp3\\别哭我最爱的人.mp3");
   Response.Clear();
   Response.ClearHeaders();
   Response.Buffer = false;
   Response.Charset="GB2312";
   Response.ContentEncoding=System.Text.Encoding.UTF8;
   Response.ContentType = "application/octet-stream";
  
   Response.AddHeader("Content-Disposition", "attachment; filename="+Server.UrlEncode("别哭我最爱的人.mp3"));
   Response.AddHeader("Content-Length", file.Length.ToString());

     
   Response.WriteFile(file.FullName);
   Response.Flush();
   Response.End();
该代码可以实现输出文件并将新打开的窗体关闭。

另一种对于大文件,我们用上述代码不是较好,因为上述代码是将文件全缓存于服务器后才输出的,如果你的服务器流量大,且文件较大,不建议用以上方法。

以下我测试过,较好能解决:
public static bool ResponseFile(HttpRequest _Request,HttpResponse _Response,string _fileName,string _fullPath, long _speed)
  {
   try
   {
    FileStream myFile = new FileStream(_fullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
    BinaryReader br = new BinaryReader(myFile);
    try
    {
     _Response.AddHeader("Accept-Ranges", "bytes");
     _Response.Buffer = false;
     long fileLength = myFile.Length;
     long startBytes = 0;
    
     int pack = 10240; //10K bytes
     int sleep = (int)Math.Floor(1000 * pack / _speed) + 1;
     if (_Request.Headers["Range"] != null)
     {
      _Response.StatusCode = 206;
      string[] range = _Request.Headers["Range"].Split(new char[] {'=', '-'});
      startBytes = Convert.ToInt64(range[1]);
     }
     _Response.AddHeader("Content-Length", (fileLength - startBytes).ToString());
     if (startBytes != 0)
     {
      _Response.AddHeader("Content-Range", string.Format(" bytes {0}-{1}/{2}", startBytes, fileLength-1, fileLength));
     }
     _Response.AddHeader("Connection", "Keep-Alive");
     _Response.ContentType = "application/octet-stream";
     _Response.AddHeader("Content-Disposition","attachment;filename=" + HttpUtility.UrlEncode(_fileName,System.Text.Encoding.UTF8) );
 
     br.BaseStream.Seek(startBytes, SeekOrigin.Begin);
     int maxCount = (int) Math.Floor((fileLength - startBytes) / pack) + 1;

     for (int i = 0; i < maxCount; i++)
     {
      if (_Response.IsClientConnected)
      {
       _Response.BinaryWrite(br.ReadBytes(pack));
       Thread.Sleep(sleep);
      }
      else
      {
       i=maxCount;
      }
     }
     _Response.Flush();
    }
    catch
    {
     return false;
    }
    finally
    {
     br.Close();
     myFile.Close();
    }
   }
   catch
   {
    return false;
   }
   return true;
  }
这一种代码也是借签网上的
它也可以实现输出文件并关闭新打开幕窗体

另外在测试当中发现,服务器端与客户的操作系统不同
也会有一些意想不到的事情发生
一般来说,用以上代码,如不能正常关闭,你可以查阅浏览器的设置,在高级中。
再者,你可以修改不同的输出内容类型Response.ContentType = "application/octet-stream";因为不同的contenttype,在客户的端的解释可能是不一样的。
有想法请回复,欢迎讨论
http://www.cnblogs.com/tour-code/archive/2006/10/25/539257.html

上一篇:repeater实现多列显示 人气:6318
下一篇:ActiveReports for .NET 简单使用 人气:5634
浏览全部asp.net的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐