- - PR -
大きなファイルをアップロードするとエラーになる
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2006-02-28 09:54
Struts1.2で開発を行っております。
CSVファイルを読み込んで、内容をDBに登録する様なプログラムを 作っているのですが、ファイルのサイズが大きいファイルだとエラーになります。 struts-config.xmlに <controller maxFileSize="1024K" bufferSize="1024" tempDir="/Program Files/Apache Software Foundation/Tomcat 5.0/temp" /> と書いてみたのですが、エラーは消えませんでした。 ちなみにCSVファイルのサイズは500Kです。 50Kまでなら読み込めることを確認しています。 ソースは import java.io.InputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.upload.FormFile; public class tagEntry extends Action{ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception{ FileUploadForm fileUploadForm = (FileUploadForm) form; FormFile file = fileUploadForm.getFile(); String strRtn = ""; int filesize = file.getFileSize(); //ファイルのサイズをチェックする if (filesize > 100000){ strRtn = "error"; }else{ //ファイル名が空の場合 if (file.getFileName().trim().equals("")){ strRtn = "error"; }else{ InputStream input = file.getInputStream(); byte[] buf = new byte[256]; String strTemp = ""; //ファイルを読み込む while(input.read(buf) != -1){ String str = new String(buf); strTemp = strTemp + str; } //ファイルの内容が取得できた場合 if (strTemp.equals("")){ strRtn = "error"; }else{ strRtn = "next"; } } } file.destroy(); return mapping.findForward(strRtn); } } こんな感じになっています。 System.out.println();をつかってログをだしてみたのですが、 大きなファイルの場合、まったくこのプログラムが動いていないみたいです。 Try catchも駄目でした。 どなたか分かる方教えてください。 よろしくお願いします。 |
|
投稿日時: 2006-02-28 12:20
500Kってちっとも大きくないですよね。500Mの間違いではないですよね?
アプリケーションサーバに何を使っているのかわかりませんが、アプリケーションサーバの ログに何か情報が出力されていないでしょうか。 |
|
投稿日時: 2006-02-28 13:00
レスありがとうございます。
いや、500Kなんです。 ログはこんな感じでした。 Apache Tomcat/5.0.28を使用しています。 2006-02-28 11:53:50 StandardWrapperValve[action]: サーブレット action のServlet.service()が例外を投げました org.apache.commons.fileupload.FileUploadException: Processing of multipart/form-data request failed. Stream ended unexpectedly at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:429) at org.apache.struts.upload.CommonsMultipartRequestHandler.handleRequest(CommonsMultipartRequestHandler.java:195) at org.apache.struts.util.RequestUtils.populate(RequestUtils.java:445) at org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:798) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:205) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164) at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:415) at javax.servlet.http.HttpServlet.service(HttpServlet.java:709) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) at glasses.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:22) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929) at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160) at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:300) at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:374) at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:743) at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:675) at org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:866) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683) at java.lang.Thread.run(Thread.java:534) 何かつかめますかね・・・。 |
|
投稿日時: 2006-02-28 13:04
ファイルサイズが大きすぎる場合には、ポップアップが
でる様にしているのですが、サーバーを再起動して 試した結果、表示されました。 しかし、もう1度試したらまた同じ現象に陥りました。 どこかに残ったままになっているのですかね・・・。 |
|
投稿日時: 2006-02-28 13:57
ログの
Stream ended unexpectedly って怪しくないですか? 50KBのファイルが正常で500KBで こけるって500KBのファイルを作ったときに壊れてる(?)ファイル を作成してしまっているとか? 不正な文字コードなどはどうでしょう? ※ ファイルアップロードは経験ないのでログから判断したので はずしてたらすいません |
|
投稿日時: 2006-02-28 15:06
TomcatとIISを連動させているのですが、
どうやらそれが原因の様です。 http://172.16.13.150/HP/jsp/test.jsp では失敗するんですが、 http://172.16.13.150:8080/HP/jsp/test.jsp にするとポップアップがでてくれます。 IISの設定を探したのですが、ファイルサイズについての 設定がみつかりませんでした・・・。 |
|
投稿日時: 2006-02-28 16:05
http://issues.apache.org/bugzilla/show_bug.cgi?id=21616
IISコネクタのバグで同様の現象が発生することが報告されていますが、コネクタは何を 使用しているのでしょうか。 |
|
投稿日時: 2006-02-28 17:16
できました!
@IISを停止 Ac:\windows\system32\inetsrvの下のMetaBase.xmlを開く B/LM/W3SVC/1/ROOT/○○にUploadReadAheadSize="1024000"を追加する CIISを起動 やはりIIS側の設定だったみたいです。 レスいただいた方々、どうもありがとうございました。 |