我有一个下载附件的功能,可是当用迅雷下载时老是去下载那个页面,而不是下载那个附件。而Windows系统的下载却可以正确下载那个文件,这是怎么回事啊????下面是我的代码 string name = listAttachment.SelectedValue;//这是一个有多个附件的ListBox控件
                string fullName = Server.MapPath("..\\..\\UpLoads\\" + name);
                FileInfo fileInfo = new FileInfo(fullName);                Response.Clear();
                Response.ClearContent();
                Response.ClearHeaders();
                Response.AddHeader("Content-Disposition", "attachment;filename=" + name);
                Response.AddHeader("Content-Length", fileInfo.Length.ToString());
                Response.AddHeader("Content-Transfer-Encoding", "binary");
                Response.ContentType = "application/octet-stream";
                Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
                Response.WriteFile(fileInfo.FullName);
                Response.Flush();
                Response.End();

解决方案 »

  1.   

    那你写的要跟那个迅雷的URL解析式一样的才可以被解析到。那样才可以确保下载的东西是正确的。
      

  2.   

    路径肯定正确,而且附件也肯定存在,因为Windows系统本身可以正确的下载下来
      

  3.   

    url解析问题。下载地址可能被加密,用户通过http下载时,会调用自己写的一个类去解密下载地址。迅雷不可能去解密你自己写的加密算法,你可以自己写个下载的软件。
      

  4.   

    讯雷下载请求你这个页面时,实际上应当是请求两次或以上
    也就是说,第一次请求你页面时,你配带的参数应该是用来说明是请求下载的
    在这个过程里,如果你是动态生成文件的话,你在接受到这个参数后就应该去生成此文件,如一个报表等
    然后重新定向一下你的页面,此时应当配带一个file的参数用来指向你文件的名称(如果不是动态生成的文件,就直接指向地址,不需要生成过程)
    你再接受file参数的时候,把路径配带上,并输出下载
    这样的好处是隐藏了文件的真实地址
    当然不为了这个的话,你大可以直接把文件真实地址输出下载即可
      

  5.   

    其实迅雷下载不了是因为迅雷对地址进行2次请求 而它的请求是使用迅雷自己的方法来创建的线程来请求资源的  而如果你使用了 Session来判定是否允许下载的话 你当前的Session是为当前浏览器所保存的  而迅雷那个线程的Session是没有值的  所以服务器就拒绝让它下载 因此  要想使用迅雷来下载的话 就不要使用Session来判定是否允许下载 或者使用其它的解决方案(这个方案我也正在想,不是楼上的那个)