在ASP.NET4.0,IE8,winXP下,如下代码: protected void DownloadFile(string fileName, string saveFileName)
        {
            System.IO.FileInfo fileInfo = new System.IO.FileInfo(fileName);
            Response.Clear();
            Response.AddHeader(DString.CONTENT_DIS, string.Format(DString.EXCLE_NAME, saveFileName));
            Response.AddHeader(DString.FILE_LENGTH, fileInfo.Length.ToString());
            Response.ContentType = DString.EXCLE_MINI;
           
            Response.WriteFile(fileInfo.FullName);            Response.End();
        } protected void btn_Download_Click(object sender, EventArgs e)
        {
            string fileName;
            string saveFile;
            fileName = MapPath(DString.EVALUATION_FILE_PATH);
            CreateScoreEvaluation(fileName);
            saveFile = "质量分析表";
            DownloadFile(fileName, saveFile);
        }发现无法正常下载,该项目中有好几处下载都是使用同一段下载代码,但有的能正常下载,有的却不能,报错:“无法打开xxx.aspx站点”,试着安装迅雷,发现,会自动打开迅雷下载,而且能成功下载,实在搞不起清楚是咋回事,我不能要求客户都安装迅雷,所以请高手帮助,谢谢!貌似在win7+IE9下没有此问题

解决方案 »

  1.   

                string DownAdress=fileName
                if (!File.Exists(Server.MapPath(DownAdress)))
                {
                    Response.Write("下载的文件不存在!");
                    Response.End();
                    return;
                }
                using (FileStream fso = new FileStream(Server.MapPath(DownAdress), FileMode.Open,FileAccess.ReadWrite,FileShare.Inheritable))
                {
                    string[] filename=DownAdress.Split(new char[]{'/'});
                    int len = Convert.ToInt32(fso.Length);
                    byte[] FileObj = new byte[len];
                    fso.Read(FileObj, 0, len);
                    Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}", HttpUtility.UrlEncode(filename[filename.Length - 1]), System.Text.Encoding.UTF8));
                    Response.AddHeader("Content-Length", len.ToString());
                    Response.ContentType = "application/octet-stream";
                    Response.Charset = "UTF-8";
                    Response.ContentEncoding = System.Text.Encoding.UTF8; 
                    Response.BinaryWrite(FileObj);
                    Response.Flush();
                    Response.Clear();
                    fso.Close();
                }
      

  2.   

                Response.AddHeader(DString.CONTENT_DIS, string.Format(DString.EXCLE_NAME, saveFileName));
                Response.ContentType = DString.EXCLE_MINI;这分别是什么值?
    另外在   Response.End(); 前 你可以写 Response.Flush();