有一个需求,通过webservice,我获得了一个大的字节流,然后通过servlet,我把它以pdf格式显示到了jsp上,现在是这样的,因为要显示这个pdf一般需要花费20秒左右,字节流的大小也能获得,我一开始只是简单显示了一行文字,就是提示后台正在运行,请稍候,然后运行完毕后,直接替换这个页面即可,现在用户说这个不行,需要让我们知道目前这个文件一共多大,目前下载了多大……,一共多大,倒好说,直接给他们看这个流有多大字节就行,关键是,如何让他们知道目前已经下载了多少字节的数据,这是一个大问题……请各位高人指点一下,谢谢!

解决方案 »

  1.   

    这是我的servlet代码
    protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException
    {
    String startCode4=arg0.getParameter("originCode4");
    String endCode4=arg0.getParameter("destCode4");
    String enrouteCode=arg0.getParameter("enrouteCode");

    arg1.setContentType("application/pdf");
    arg1.setHeader("Content-disposition","inline; filename=foobar.pdf" );
    ByteArrayOutputStream baos =Base64.getByteArrayOutputStream(startCode4,endCode4,enrouteCode);
    arg1.setContentLength(baos.size());
    ServletOutputStream sos=arg1.getOutputStream();
    //sos.write(baos.toByteArray(),0,baos.size());
    baos.writeTo(sos);
    sos.flush();
    baos.close();
    sos.close();
    }
    这是我的输出pdf的方法
      

  2.   

    除非你自己重写一个webservice客户端,下载了多少报个数,否则没有办法。
    现有的webservice客户端好象也没有能提供下载的数据量的。或者,文件部分不通过webservice,webservice只给出文件的地址,由一个客户端程序去下载。这样实现起来还简单些。
      

  3.   

    我也是第一次接触这个webservice,目前的功力只是通过别人生产的webservice,然后我这里直接进行调用, flyxxxxx你说的重写一个webservice客户端是指什么意思,别人写的webservcie是用.net写的,我自己写了一个类Base64,它是用于接收webservice的,你说的重写客户端具体指什么呢?
      

  4.   

    调用和接收webservice和部分。这要包括实现http协议和webservice xml文件解析。
    你那个Base64只是拿到数据后的处理程序,这时数据已经下载下来了。
      

  5.   

    这部分你必须用类HttpURLConnection来处理向服务器端发送你的xml文件,接收服务器发过来的文件,在接收过程中就可以确定有多少数据接收了,收完后,再将xml解析出来。
      

  6.   

    汗!flyxxxxx,能举一个小例子说说吗?
      

  7.   

    我做了测试,从webservice获得数据并没有太耗时,主要是显示的时候比较耗时,能不能就从显示这块给我一些好的方法,谢谢大家