我有一个报表,如果选择的内容多,那么执行程序时间比较长,导出的文件大小其实没有太大变化,就不能出现下载窗口了!但是文件能够正常生成,只是没有出现下载的页面。好像和request、response超时有关,导致没有返回页面。谁给点提示啊!
这是我的代码:try {
InputStream fis = new BufferedInputStream(new FileInputStream(fileName));
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();
 // 清空response
response.reset(); 
// 设置response的Header
response.addHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("utf-8"),"ISO-8859-1"));
response.addHeader("Content-Length", "" + file.length());
OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/octet-stream");
toClient.write(buffer);
toClient.flush();
toClient.close();
} catch (Exception e) {
e.printStackTrace();
}如果选择的内容少,debug在红色行时候,就会弹出下载提示窗口。
内容多时候,页面就没有反应了,但是从后台打印可以发现,文件确实已经生成,程序也都执行了。延长时间都试过了,下面是代码,也没有作用,不知道是怎么回事!HttpClient client = new HttpClient();       client.getHttpConnectionManager().getParams().setConnectionTimeout(3000000);  client.getHttpConnectionManager().getParams().setSoTimeout(3000000);
    
HttpParams params = new DefaultHttpParams();
httpConnectionParams.setConnectionTimeout(1111111);
httpConnectionParams.setSoTimeout(11111111);
params.setParameter("http.socket.timeout", 1000000);
params.setParameter("http.connection.timeout", 1000000);问题解决了,分全部赠送报表requestresponsejavasevelet

解决方案 »

  1.   

    程序写的很不好。应该采用流式算法,申请固定大小的 buffer[] ,然后循环的读取一段文件就向response写入一段内容。
      

  2.   

    response.setContentType("text/html; charset=GBK");
            //得到下载文件的名字
            //String filename=request.getParameter("filename");
            
            //解决中文乱码问题
    //         String filename=new String(request.getParameter("filename").getBytes("iso-8859-1"),"gbk");         //创建file对象
            File file=new File(fileName);         //设置response的编码方式
            response.setContentType("application/octet-stream");         //写明要下载的文件的大小
            response.setContentLength((int)file.length());         //设置附加文件名
           // response.setHeader("Content-Disposition","attachment;filename="+filename);
            
            //解决中文乱码
        response.setHeader("Content-Disposition","attachment;filename=tt.doc");                //读出文件到i/o流
            FileInputStream fis=new FileInputStream(file);
            BufferedInputStream buff=new BufferedInputStream(fis);         byte [] b=new byte[1024];//相当于我们的缓存         long k=0;//该值用于计算当前实际下载了多少字节         //从response对象中得到输出流,准备下载         OutputStream myout=response.getOutputStream();         //开始循环下载         while(k<file.length()){             int j=buff.read(b,0,1024);
                k+=j;             //将b中的数据写到客户端的内存
                myout.write(b,0,j);         }         //将写入到客户端的内存的数据,刷新到磁盘
            myout.flush();
            myout.close();
    修改之后还是没有作用啊
      

  3.   

    程序似乎没看出来问题了(虽然包装BufferedInputStream是多余的),问下:你写的是JSP还是Servlet?测试过程是怎么做的?另外,能说明下你程序里面的HttpClient是拿来干啥的么?
      

  4.   

    灌水的混子,设置tomcat的超时,怎么设置啊?具体说一下,谢谢哈!HttpClient是我用来设置超时时间的!