如题:
代码大致如下:
beat.getResponse().setCharacterEncoding("utf-8");
beat.getResponse().setContentType("application/x-download");
beat.getResponse().setHeader("Content-Disposition", "attachment;filename="+gbNm+"_"+DateUtil.DateFormat(new Date(), "yyyyMMdd")+".xls");
Workbook wb=orderAddressService.generteExcel(list);
ServletOutputStream out = getResponse().getOutputStream();
wb.write(out); 
out.flush();
out.close(); 调试后发现,wb已经生成,在执行wb.write(out)时抛出异常,org.eclipse.jetty.io.EofException
at org.eclipse.jetty.http.HttpGenerator.flushBuffer(HttpGenerator.java:911)
at org.eclipse.jetty.http.AbstractGenerator.flush(AbstractGenerator.java:433)
at org.eclipse.jetty.server.HttpOutput.flush(HttpOutput.java:90)
at org.eclipse.jetty.server.HttpConnection$Output.flush(HttpConnection.java:1145)
at org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:173)
at org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:107)
at org.apache.poi.poifs.storage.BigBlock.doWriteData(BigBlock.java:67)
at org.apache.poi.poifs.storage.DocumentBlock.writeData(DocumentBlock.java:195)
at org.apache.poi.poifs.storage.BigBlock.writeBlocks(BigBlock.java:98)
at org.apache.poi.poifs.storage.DocumentBlock.writeBlocks(DocumentBlock.java:34)
at org.apache.poi.poifs.filesystem.POIFSDocument$BigBlockStore.writeBlocks(POIFSDocument.java:547)
at org.apache.poi.poifs.filesystem.POIFSDocument.writeBlocks(POIFSDocument.java:303)
at org.apache.poi.poifs.filesystem.POIFSFileSystem.writeFilesystem(POIFSFileSystem.java:402)
at org.apache.poi.hssf.usermodel.HSSFWorkbook.write(HSSFWorkbook.java:1177)
在其他浏览器中都正常,请问有人了解这是怎么回事吗?

解决方案 »

  1.   

    beat.getResponse().setCharacterEncoding("ISO-8859-1");
      

  2.   


    谢谢clarck_913,不行哟,和编码应该没有关系吧
      

  3.   

    哦,我看错了,我以为你遇到的是乱码问题呢又看了下,你是遇到了异常信息你给用户提供下载Excel文件,其实不需要Workbook的,这个对象是在内存里操作Excel用的。你需要的步骤其实只是要用File类的对象去获得要提供给用户的文件然后把File写到response提供的OutputStream里去你是在后台执行到wb.write的时候出现了错误,应该和浏览器没有关系吧我之前做过类似的下载工作,用的是 out.write(这里是文件转成的字节数组);这样做的。
      

  4.   


    InputStream fis = new BufferedInputStream(new FileInputStream(file));
    byte[] buffer = new byte[fis.available()];
    fis.read(buffer);
    fis.close();
    response.reset(); // 浏览器区分
    response.setContentType("application/octet-stream;charset=UTF-8");
    response.setHeader("Content-disposition", "attachment;filename="
    + strFileName);
    response.addHeader("Cache-Control", "no-cache");
    OutputStream fos = new BufferedOutputStream(response.getOutputStream()); //
    fos.write(buffer);
    fos.flush();
    fos.close();
      

  5.   


    下载时,没有被迅雷拦截。而且这种问题只是在IE6下出现,在IE8和FF下都很正常
      

  6.   

    大概知道原因了,在页面上用的是<a href="javascript:void(0)">export</a>,估计这种方式导致ie6取消了和页面的响应,没有出现下载提示,然后服务器端就停止了输出。改为<a href="#">export</a>就正常了。谢谢各位的帮助