protected void firebtn_Click(object sender, EventArgs e)
    {
        
   
        string ID = Request["ID"];
        if (ID != null &&ID != "")
        {
            string[] EID =ID.Split(',');
            foreach (string s_fileName in EID)
            {
                String FullFileName = System.Web.HttpContext.Current.Server.MapPath(s_fileName);
                 //上面那行代码出现了(“D:\OA//Files//20080619.jpg”不是有效的虚拟路径。)的错误
                FileInfo DownloadFile = new FileInfo(FullFileName);
                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=" + System.Web.HttpUtility.UrlEncode(DownloadFile.FullName, System.Text.Encoding.UTF8));
                System.Web.HttpContext.Current.Response.AppendHeader("Content-Length", DownloadFile.Length.ToString());
                System.Web.HttpContext.Current.Response.WriteFile(DownloadFile.FullName);
                System.Web.HttpContext.Current.Response.Flush();
                System.Web.HttpContext.Current.Response.End();              
            }
                   }        else
        {
            message.messageboxs((Button)sender, "请选择要下载的文件");
        }
}出现了“D:\OA\Files\20080619.jpg”不是有效的虚拟路径。这个怎么弄啊?刚涉及这方面的知识,不太懂~

解决方案 »

  1.   

    你看下s_fileName 值是什么,服务器上有没有这个目录
      

  2.   

    System.Web.HttpContext.Current.Server.MapPath(s_fileName); 
    里面的s_fileName必须是相对路径,否则你直接用s_fileName就可以了。
      

  3.   

    s_fileName 值在服务器上有这个目录啊,复制路径到地址栏都找到那个文件
      

  4.   

    最好断点跟踪下 s_fileName 的值.
    这样有助于楼主判断.
    System.Web.HttpContext.Current.Server.MapPath(s_fileName); 
      

  5.   

    MapPath(string path)返回的是路径,path应该是服务器的一个虚拟目录,而不能是具体文件的路径
      

  6.   

    String FullFileName = System.Web.HttpContext.Current.Server.MapPath(s_fileName); 
    如:s_fileName = "UpLoad/aa.doc"
      

  7.   

    那到底怎么改啊??我文件存到数据库的路径是“D:\OA\Files\20080619.jpg”这样的
      

  8.   

    OA是你的工程目录吧?其实你只要把文件名存到数据库就可以了,如20080619.jpg然后Server.MapPath(string.Format("~/Files/{0}", "20080619.jpg"));就能得到虚拟目录的路径,试试看!
      

  9.   

    改了,路径没有不错了,但点击下载按钮没有任何反应。AJAX的UPDATEPROGRESS一直显示我预设的“等待”字符
      

  10.   

    不好意思,AJAX是不能实现无刷新下载的,而且也没有必要如果你项目已经运用了无刷新技术,则可以避免执行无刷新,给UpdatePanel添加一个PostBackTrigger属性,设置它的ControlID为你下载按钮的ID