在服务器端写Respopnse.Write("<script>window.open('xxx.xls','','');</script>");
可以实现打开一个新窗口,因为新窗口指向一个Excel文件,所以可以实现下载。
但是,这样做会打开一个空窗口。有没有办法可以直接显示“文件另存为对话框”,而不用打开新的窗口就可以实现文件的下载?

解决方案 »

  1.   

    直接用<a src=xxx.xls></a>
      

  2.   

    給你一個函數吧,直接下載文件,絕對不會有任何不好的地方,看完後快給份,嘻嘻~~ /// <summary>
    /// 打开指定的文件
    /// </summary>
    /// <param name="PathName">路径(相对路径)</param>
    /// <param name="FileName">文件名(带扩展名)</param>
    public void OpenFile(Page page, string PathName, string FileName)
    {
    string name = PathName + FileName;
    FileInfo aFile = new FileInfo(page.Server.MapPath(name));
    string na = Path.GetFileName(name);
    page.Response.Clear();
    page.Response.ClearHeaders();
    page.Response.BufferOutput = false;
    page.Response.ContentType = "application/octet-stream";
    page.Response.AppendHeader("Content-disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, Encoding.UTF8));
    page.Response.AddHeader("Content-Length", aFile.Length.ToString());
    page.Response.WriteFile(name);
    page.Response.Flush();
    page.Response.End();
    }
      

  3.   

    谢谢两位回复,clerkie(振兴中华,抵制日货!)的方法可以用,xiaopai20(生活=懒觉+考试)说的方法我不太明白什么意思,不知道怎么用,用Response.write()方法把你说的写到页面上以后没有出现下载文件。 
    有没有办法能在浏览器端直接显示一个“文件另存为”对话框,实现从服务器端下载一个文件?
      

  4.   

    <a href="***.xls"></a>
      

  5.   

    我刚才又试了一下,clerkie(振兴中华,抵制日货!)的方法会弹出两次“打开/保存”对话框,第二次才出现“文件另存为”对话框,而且其中的默认名是页面的名字,扩展名是.htm。
    这样不太方便。如果在浏览器端直接显示一个“文件另存为”对话框不容易的话,有没有办法让clerkie(振兴中华,抵制日货!)的方法只显示一次“打开/保存”对话框,并且“另存为”对话框里的默认文件名的扩展名是.xls?
      

  6.   

    我又改了一下,你用这个函数试试吧: /// <summary>
    /// 打开指定的文件
    /// </summary>
    /// <param name="PathName">路径(相对路径)</param>
    /// <param name="FileName">文件名(带扩展名)</param>
    public void OpenFile(string PathName, string FileName)
    {
    string name = PathName + FileName;
    FileInfo aFile = new FileInfo(Server.MapPath(name));
    string na = Path.GetFileName(name);
    Response.Clear();
    Response.ClearHeaders();
    Response.BufferOutput = false;
    Response.ContentType = "application/octet-stream";
    Response.AppendHeader("Content-disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, Encoding.UTF8));
    Response.AddHeader("Content-Length", aFile.Length.ToString());
    Response.WriteFile(name);
    Response.Flush();
    Response.End();
    }
      

  7.   

    谢谢clerkie(振兴中华,抵制日货!) ,你修改后的函数一切正常了,只显示一次“打开或保存”对话框,点击保存后,出来“文件另存为”对话框...
    我还有一个问题想问,能不能让浏览器端不显示“打开或保存”对话框,直接在浏览器端显示一个“文件另为”对话框来实现下载文件?多谢了,另外,哪里有这方面的资料,能给个网址就更好了。
    明天再结帖,大家可以给我发邮件:[email protected]
      

  8.   

    你这个要求用B/S的编程是无法达到的,毕竟B/S不能控制客户机~~
      

  9.   

    谢谢,这个问题我自己再考虑考虑吧,看能不能用别的办法实现这个功能。
    我看到别人做的页面,用了一个控件,点击一个<input>之后,直接弹出一个“文件另存为”对话框,然后可以根据控件中的数据,直接在客户端生成一个EXCEL文件,客户就是想让我们做出这样的效果。
    这个问题以后再说,昨天网络出了点问题,要不然昨天就结帖了。