我写了一段代码提供文件下载功能,代码如下:  Public Shared Sub SendFileToClient(ByRef ServerResp As System.Web.HttpResponse, ByVal FilePath As String, Optional ByVal FileName As String = "")
            Dim aFile As New FileInfo(FilePath)
            Dim name As String
            If FileName <> "" Then
                name = FileName
            Else
                name = Path.GetFileName(FilePath)
            End If            ServerResp.Clear()
            ServerResp.ClearHeaders()
            ServerResp.BufferOutput = False
            ServerResp.ContentType = "application/octet-stream"            ServerResp.AppendHeader("Content-disposition", "attachment;filename=" + HttpUtility.UrlEncode(name, System.Text.Encoding.UTF8))
            ServerResp.AddHeader("Content-Length", aFile.Length.ToString())
            ServerResp.WriteFile(FilePath)
            ServerResp.Flush()
            ServerResp.End()
        End Sub  客户端如果是2000系统,下载文件很正常,但客户端如果是xp,下载时就没有响应。不知原因何在,请高手指点。  注:出现这种情况可能有以下两点原因
  1.这段代码可能有问题,只适用于客户端为2000的情况,而不支持客户端为xp的情况,那如何修改代码,才能使代码即支持2000,又能支持xp的客户端?
  2.这段代码本身没有问题,而是客户端的设置不当所造成,那如何设置xp的客户段,才能使这段代码在客户段为xp的情况下也运行正常。

解决方案 »

  1.   

    错误原因为1的可能性很小,看你的代码应该是个web应用的程序,你在客户端接收下载文件的地方申明了安全接口吗?
      

  2.   

    这个可以,试试看!
    dim file as system.io.fileinfo=new system.io.fileinfo(server.mappath(themp3))
    response.clear()
    response.addheader("content-disposition","attachment;filename=" + file.name)
    response.addheader("content-length",file.length.tostring())
    response.contenttype="application/octet-stream"
    response.writefile(file.fullname)
    response.end
      

  3.   

    xp打sp2的补丁了吗,如果打了补丁的话,是被拦截了
      

  4.   

    楼上几位说的不错,确实和sp2有关
    我在一台xp机器上测试过,一开始没有安装sp2,下载正常
    装完sp2后,就出现下载无响应的情况了。
    我把防火墙关闭后仍然不行。
    应该怎么办呢?
      

  5.   

    可能是因为filename为中文,试试英文会不会?
      

  6.   

    sp2:
    tools--->pop-up Blocker--->
    pop-up Blocker settings-->
    address of web site to allow-->
    add---->添加你要访问的服务器的ipsp2 的这个功能负责屏蔽广告,也就是你装了3721,google之都会有此问题。
      

  7.   

    我的xp是英文版,tools在你的机器上好像就是ie菜单栏上的"选项",你按照我说的设一下,一定好用
      

  8.   

    还有:
    filter level ----〉 设成
    low: allow pop-ups from secure sites
      

  9.   

    我所说的“无响应”是指页面无法响应任何时间,例如按钮点击事件。justdoit006(我的心太乱),我按照你说的方法做了,现在页面是不会出现“无响应”的情况了,但是IE的那个下载对话框弹不出来,鼠标一直在闪,似乎是下载对话框想跳又跳不出来的那种感觉,呵呵。还有,我到PCHOME主页上随便找个下载链接,可以弹出下载对话框,说明这个问题还是可以通过程序解决的,那请问应该如何修改我的代码,使之无论对应何种客户端都能够正常下载呢?
      

  10.   

    屏蔽广告功能主要屏蔽一些<body onload='window.open()'>之类的强制用户在浏览页面时就显示的窗口,其实就是骗子,在屏蔽广告的同时也屏蔽了一些机能。你说的“随便找个下载链接”,是好用的,因为这是用户触发了事件,好比你把window.open('xx.html')放在<body onload〉属性下会被屏蔽,而写在<button onclick>下就不会别屏蔽。
    这也是因为用户触发了事件。
    所以xp+sp2有时不能弹出对话框,只能在下载时按住Ctrl键才能允许弹出。
      

  11.   

    to:justdoit006(我的心太乱)
    我的文件下载确实是点击“下载”按钮时才触发的;
    而且我点击“下载”按钮时按住"Ctrl"或"Shit"也没有弹出下载对话框。
      

  12.   

    不能呀,我的机器就是sp2的。
    确认一下
    1.在address of web site to allow里添加你要访问的服务器ip
    2.一直按住"Ctrl",点击“下载”按钮,下载成功后松开"Ctrl"键。
      

  13.   

    试过了,没用
    按住"Ctrl",点击“下载”按钮,弹不出下载对话框
    下面的Status栏里,一直再不停地刷新显示URL,鼠标也不停的再闪。
      

  14.   

    sweet12345(努力就会有希望) 
    哈哈,居然在这里碰到你
    快去叫你们公司的牛人来看看这个问题。
      

  15.   

    再补充一点
    我这个操作页面是放在一个frame里的
    主页面包括3个frame:top,left,main
    操作页面就是main
    如果操作页面不包含在frame中一切正常,只是包含在frame中时才出现那种情况,我设断点调试时发现点击“下载”钮后客户端不停的post到服务器端。
      

  16.   

    你可以点击“下载”钮 时新弹出一个新页 然后在这个新页上 写 Public Shared Sub SendFileToClient(ByRef ServerResp As System.Web.HttpResponse, ByVal FilePath As String, Optional ByVal FileName As String = "")
      

  17.   

    如果这个页面放在Frame中,在WinXP sp2环境下,会因为某些安全原因导致那样的情况,具体原因不详,不装SP2就没问题,估计是sp2中IE增强的安全性所导致的。
      

  18.   

    问题解决了.
    我在frameset 的 onbeforeunload事件中删除登录者存于Application中的账号,以便用户不慎关闭浏览器后能马上重新登录。
    正如楼上所说,Win XP sp2由于安全性方面的考虑,点击“下载”钮后也会触发frameset的onbeforeunload事件,导致莫名其妙的循环post(2000以及xp+sp1就不会出现这种情况)。
    最后我把frameset中的onbeforeunload事件处理删除,就可以正常下载了。
    谢谢各位的帮助。