- - PR -
Strutsでファイルダウンロード時にエラー
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2008-12-20 12:01
Strutsでファイル(CSV)をダウンロードさせた後に「java.lang.IllegalStateException」が発生し、原因が分からずに困っております。
【ソースコード】ファイル出力を行っているActionのメソッドです public void fileOut(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) throws Exception { SearchBO searchBO = new SearchBO(getDbSession(), request); String fileName = searchBO.serchData((InstructForm) form); ServletOutputStream outputStream = null; FileInputStream inputStream = null; try { BaseActionProperties properties = (BaseActionProperties)threadLocal.get(); HttpServletResponse httpResponse = properties.getResponse(); File file = new File(fileName); httpResponse.setContentType("application/octet-stream"); httpResponse.setContentLength((int) file.length()); httpResponse.setHeader("Content-Disposition", "attachment; filename=" + file.getName()); outputStream = httpResponse.getOutputStream(); inputStream = new FileInputStream(file); int size = 0; while ((size = inputStream.read()) != -1) { outputStream.write(size); } outputStream.flush(); }catch (IOException ex) { throw new SystemFatalException(ex); }finally { if (outputStream != null) { outputStream.close(); } if (inputStream != null) { inputStream.close(); } } this.setForward("Show"); } 【エラー内容】 java.lang.IllegalStateException: [アドレスが入ります]Action.do: tried to write 2446 bytes with content-length 442 (Atchar=60). atcom.caucho.server.connection.ResponseStream.lengthException(ResponseStream.java:548) atcom.caucho.server.connection.ResponseStream.setBufferOffset(ResponseStream.java:359) atcom.caucho.vfs.i18n.ISO8859_1Writer.write(ISO8859_1Writer.java:132) atcom.caucho.server.connection.ToByteResponseStream.flushCharBuffer(ToByteResponseStream.java:469) atcom.caucho.server.connection.ResponseStream.finish(ResponseStream.java:659) atcom.caucho.server.connection.ResponseStream.close(ResponseStream.java:796) atcom.caucho.server.connection.AbstractHttpResponse.finish(AbstractHttpResponse.java:1956) atcom.caucho.server.connection.AbstractHttpResponse.close(AbstractHttpResponse.java:260) atcom.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:190) atcom.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:229) atcom.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:274) atcom.caucho.server.port.TcpConnection.run(TcpConnection.java:511) atcom.caucho.util.ThreadPool.runTasks(ThreadPool.java:520) atcom.caucho.util.ThreadPool.run(ThreadPool.java:442) at java.lang.Thread.run(Unknown Source) 【環境】 OS:Windows Server 2003 JDK:1.5.0_16 Strus:1.3.8 APサーバ:intra mart(Resin)Ver.6.1 Webサーバ:Apach4.0 解決策、解決案、ヒントでも何でも構いませんので、ご教授下さいますよう宜しくお願いします。 |
|
投稿日時: 2008-12-20 14:27
HTTPレスポンスの出力ストリームは閉じる必要はないです。
あと何故フォワードしているのでしょうか? |
|
投稿日時: 2008-12-22 13:51
null でフォワードするといいですよ
あと補足でnocaheにしてるとうまく動きません。 |
1