- PR -

ファイルアップロードについて

1
投稿者投稿内容
ぼぼ
常連さん
会議室デビュー日: 2005/05/29
投稿数: 45
投稿日時: 2006-04-09 00:17
またまた失礼します。

システムでファイルのアップロード・ダウンロードのプログラムを組みたいのですが、
エラーになってしまい分かりません。
ソースはweb上で見つけてきたのを自分の環境に少しアレンジしたものです。
エラーになるのは下記@内部ですがコンソールにエラー内容が表示されず(自分の環境だけ?)
throwした画面でも「エラーが発生しました」と表示されるだけです。
APIからローカルのパスを読みとろうとしているのは分かるのですが、フォルダの存在は実際あります。

もしかしたら他xmlファイルなど定義が必要なのではないかと・・思っているのですが、
どなたかご存知の方いらっしゃいましたらよろしくお願いします。

public final class AdminUploadBean extends HttpServlet {

// アップロード先パス
protected static final String UPLOADPATH = "data";

public void upload(HttpServletRequest request, HttpServletResponse response)
throws BaseException {
//throws ServletException, IOException{

@ String path = getServletContext().getRealPath(UPLOADPATH);
DiskFileUpload objDfu = new DiskFileUpload();
objDfu.setSizeMax(-1); // アップロードファイルの最大サイズ(-1は無限)
objDfu.setSizeThreshold(1024); // バッファサイズ
objDfu.setRepositoryPath(path); // 一時ファイルの保存先フォルダ
objDfu.setHeaderEncoding("Shift_JIS"); // ヘッダの文字エンコーディング

try {
List objLst=objDfu.parseRequest(request);
Iterator objItr=objLst.iterator();
while (objItr.hasNext()) {
FileItem objFi=(FileItem)objItr.next();
if (!objFi.isFormField()) {
String strNam=objFi.getName();
if (strNam!=null && !strNam.equals("")) {
strNam=(new File(strNam)).getName();
objFi.write(new File(path + "/" + strNam));
}
}
}
} catch (FileUploadException e) {
throw new BaseException(e.getMessage(),e);
} catch (Exception e) {
throw new BaseException(e.getMessage(),e);
}
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-04-09 00:32
BaseException というのでラップしてしまい FileUploadException のスタックトレースなどがしっかりログなり標準エラー出力なりに記録されていないのではないでしょうか?

catchブロックで、 e.printStackTrace() と記述するとどこで問題が発生したのか、何が問題となったのかわかるかもしれません。
ぼぼ
常連さん
会議室デビュー日: 2005/05/29
投稿数: 45
投稿日時: 2006-04-09 01:24
返信ありがとうございます。

おっしゃる通り記述しましたらエラー内容が表示されました。
ただなぜNullPointerExceptionになるのか・・const値をセットしてるわけで・・。

よろしくお願いします。

java.lang.NullPointerException
at javax.servlet.GenericServlet.getServletContext(GenericServlet.java:204)
at common.admin.AdminUploadBean.upload(AdminUploadBean.java:39)
at common.admin.AdminUploadAction.perform(AdminUploadAction.java:47)
at common.util.BaseAction.execute(BaseAction.java:54)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at common.util.EncodingFilter.doFilter(EncodingFilter.java:23)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:213)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2416)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:601)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:392)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:565)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:619)
at java.lang.Thread.run(Thread.java:534)
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-04-09 01:51
Servlet の init メソッド内で super.init() を呼びだしていないと getServletContext() メソッドで NullPointerException が発生することがあります。
これに該当しないでしょうか?
・BEA dev2dev > リソース > 日本語ソリューション > BEA WebLogic Server >
[Web アプリケーションの再デプロイ時に "java.lang.NullPointerException" が発生する]
http://www.beasys.co.jp/BeaPortal/cs/solution/getSolution.do?solutionId=22195&page=7
ぼぼ
常連さん
会議室デビュー日: 2005/05/29
投稿数: 45
投稿日時: 2006-04-09 02:18
インギさんありがとうございます。

確かにconfigがnullになってました。
初期化が必要だったんですね、教えていただけなかったら気付かないままでした。

ほんとうにありがとうございました!
ぼぼ
常連さん
会議室デビュー日: 2005/05/29
投稿数: 45
投稿日時: 2006-04-09 03:35
引き続き失礼します。

送信先パスの取得はうまく行ったのですが、
List objLst = objDfu.parseRequest(request);
Iterator objItr=objLst.iterator();
のところで全くファイル情報を取得してくれません。

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=20053&forum=12
↑同じような質問があったので参考にしたのですが環境が違うせいか、requestにファイル情報らしきものがありません。

そこでjspの記述に問題があるのではないかと思ってるのですが・・。

<form action="uploaddo.do" enctype="multipart/form-data" method="POST">
<input name="fl" type="file" size="65" />
<input type="submit" value="更新する" />
</form>
↑こんな感じの記述ですが気になってるのはinputのnameなのですが、フレームワークでstrutsを使ってる為Formにゲッターセッターを用意したものを使っていたのですが、ここではそれを使うとエラーになってしまいます。

どなたかアドバイスをお願いします。
ん〜難しいですね・・。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-04-09 10:38
まずは Struts のサンプルを参考にしてはいかがでしょうか?
ぼぼ
常連さん
会議室デビュー日: 2005/05/29
投稿数: 45
投稿日時: 2006-04-09 14:12
インギさん何度もありがとうございます。

struts,アップロードで検索したらいいサンプルもありました。
またこちらも簡単に出来てしまいました。

振り回されっぱなしです・・ありがとうございました。
1

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