fileinputstream.close();在这句之前加System.out.println(下载成功);
捕获异常,打印System.out.println(下载成功);其实就是语句如果能执行到那里就是已经下载完了

解决方案 »

  1.   

    好象不对的吗?
    这个JSP页面执行到以后,他会谈出一个下载的窗口,当窗口出来的时候其实已经
    执行到了
    fileinputstream.close();这个地方!
    可能这个文件在服务器的缓存里面!
    这个时候怎么判断用户到底是按了SAVE 还是CANCEL
      

  2.   

    不太清楚,顶一下吧。好像如果点save的话会再执行一次吧?
      

  3.   

    确实当窗口出来的时候已经执行过了fileinputstream.close();!原因比较麻烦,听我慢慢说来...
      

  4.   

    你可以把web服务器带的相关的j2ee包解开来看看里面的源代码。实际上response里面有个成员变量是一个stream(我用的是resin,这个成员变量是WriterStream,这个是由web服务器开发厂商编写的,不同的服务器不一样),当你在jsp或者servlet中调用response.getOutputStream()时便返回了这个stream。所以楼主的程序中response.getOutputStream().write(abyte0, 0, j);实际上是把文件内容写到了response的stream变量中去了。那么后来又是怎么把这个文件内容发送给客户端的呢,这个就是web服务器的事情了,他会把response流中的东西发送给客户端。具体的实现细节我就不太清楚了。所以在fileinputstream.close();写System.out.println(下载成功);是没有用的,不论成功与否,这句话都会被打印的
      

  5.   

    如果你要能监控到客户端是否下载完成,就比较麻烦了,你不能用http方式去发送文件给客户端。可以写个控件放在页面上,用socket或者ftp协议来接受。