日期:2014-05-17  浏览次数:20605 次

Response.Redirect定位下载,页面直接关闭
碰到一个奇怪的问题,我有一个下载的页面,接收下载的ID,如果程序会根据此ID取得文件的真实路径,然后就用Response.Redirect到用户的窗口重定向到真实的下载地址,如果是IE能直接显示的格式(如网页,图片等)就应该在IE中直接显示此文件的内容,如果是IE不能直接显示的格式(如zip,exe)等应该提示用户下载。  
   
  但我碰到的问题是,当我使用IE来访问下载页面时,如果下载文件的格式是txt等,没有问题,文件内容直接显示在了IE中,但如果文件格式是zip时,没有出现预期的提示打开/保存/取消的对话框,而是浏览器窗口闪一下之后就自动关闭了,什么都没有。而如果使用Firefox则一切正常。  
   
  有人碰到过类似的问题吧?先谢了。 

补充: 打开页面的时候按住 CTRL 就能正常下载,另外下载文件的URL在浏览页面直接输入可以正常下载

------解决方案--------------------
进来学习了
------解决方案--------------------
用server.transfer看看
------解决方案--------------------
学习
------解决方案--------------------
正常的话是不会这样子的.
------解决方案--------------------
看看是否是浏览器设置的原因,我的ie7可以
------解决方案--------------------
看看是不是ie出问题了,ie经常出怪问题。搂住问题我遇到过,重启解决。
你不妨去其他机器上试试。
------解决方案--------------------
这个异常现象倒是没碰到过...
------解决方案--------------------
mark
------解决方案--------------------
你的IE 打开 其它 网站 的下载 也是关闭/?
------解决方案--------------------
比较少见了.还没碰到过
------解决方案--------------------
给你个函数,你在page_load里判断下,如果不能直接在网页显示,就调用这个下载
把文件名(带路径)和你下载显示的文件标题作为参数传入就行 

C# code
private void DownLoad(string filepath, string filetitle) 
{
    System.IO.FileInfo fi=new System.IO.FileInfo(filepath);        
    System.Web.HttpContext.Current.Response.Clear();
    System.Web.HttpContext.Current.Response.ClearHeaders();
    System.Web.HttpContext.Current.Response.Buffer = false;
    System.Web.HttpContext.Current.Response.ContentType = "application/octet-stream";
    System.Web.HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(filetitle, System.Text.Encoding.UTF8));
    System.Web.HttpContext.Current.Response.AppendHeader("Content-Length", fi.Length.ToString());
    System.Web.HttpContext.Current.Response.WriteFile(fi.FullName);
    System.Web.HttpContext.Current.Response.Flush();
    System.Web.HttpContext.Current.Response.End();
}

------解决方案--------------------
添加这样一句话Response.AppendHeader("Content-Disposition","attachment;filename=aa.xls"); 
filename=aa.xls
表示打开/保存/取消的文件名

------解决方案--------------------
友情UP

------解决方案--------------------
这个异常现象倒是没碰到过...
------解决方案--------------------
图片下载
C# code
public void SavePhotoFromUrl(string address, string FileName)
    {
        System.Net.WebClient wc = new System.Net.WebClient();
        try
        {
            wc.DownloadFile(address, FileName);
            Response.Write("<script>alert('远程文件已经下载完毕!地址为" + filename + "')</script>");
        }
        catch (System.Exception ex)
        {
            Response.Write("error:" + ex.Message.ToString());
        }
    }

------解决方案--------------------
这样一来解决了`你所描述的问题了``
------解决方案--------------------