- PR -

大きなファイルをアップロードするとエラーになる

投稿者投稿内容
未記入
会議室デビュー日: 2006/01/25
投稿数: 18
投稿日時: 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も駄目でした。

どなたか分かる方教えてください。
よろしくお願いします。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2006-02-28 12:20
500Kってちっとも大きくないですよね。500Mの間違いではないですよね?
アプリケーションサーバに何を使っているのかわかりませんが、アプリケーションサーバの
ログに何か情報が出力されていないでしょうか。
未記入
会議室デビュー日: 2006/01/25
投稿数: 18
投稿日時: 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/01/25
投稿数: 18
投稿日時: 2006-02-28 13:04
ファイルサイズが大きすぎる場合には、ポップアップが
でる様にしているのですが、サーバーを再起動して
試した結果、表示されました。

しかし、もう1度試したらまた同じ現象に陥りました。
どこかに残ったままになっているのですかね・・・。
n.w
大ベテラン
会議室デビュー日: 2003/07/15
投稿数: 126
お住まい・勤務地: 神奈川
投稿日時: 2006-02-28 13:57
ログの
Stream ended unexpectedly
って怪しくないですか? 50KBのファイルが正常で500KBで
こけるって500KBのファイルを作ったときに壊れてる(?)ファイル
を作成してしまっているとか? 不正な文字コードなどはどうでしょう?

※ ファイルアップロードは経験ないのでログから判断したので
はずしてたらすいません
未記入
会議室デビュー日: 2006/01/25
投稿数: 18
投稿日時: 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の設定を探したのですが、ファイルサイズについての
設定がみつかりませんでした・・・。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2006-02-28 16:05
http://issues.apache.org/bugzilla/show_bug.cgi?id=21616

IISコネクタのバグで同様の現象が発生することが報告されていますが、コネクタは何を
使用しているのでしょうか。
未記入
会議室デビュー日: 2006/01/25
投稿数: 18
投稿日時: 2006-02-28 17:16
できました!

@IISを停止
Ac:\windows\system32\inetsrvの下のMetaBase.xmlを開く
B/LM/W3SVC/1/ROOT/○○にUploadReadAheadSize="1024000"を追加する
CIISを起動

やはりIIS側の設定だったみたいです。
レスいただいた方々、どうもありがとうございました。

スキルアップ/キャリアアップ(JOB@IT)