- PR -

トマホーク使用のファイルアップロード時の例外をキャッチ

1
投稿者投稿内容
天ぷら
会議室デビュー日: 2007/02/13
投稿数: 5
お住まい・勤務地: 横浜
投稿日時: 2007-08-14 18:51
件名のとおりトマホークを使用しファイルのアップロード処理を実装していますが、
設定したファイルサイズを超えた場合、例外をキャッチしたいのですが、
どうしたらできますか?

サイズを超えてしまうと自画面に戻って来ますが、
何もなかったかのように初期化されてしまいます。
そこで例外をキャッチできればなと思いますが
どなたかご教授ください。
お願いいたします。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2007-08-14 22:46
なんですかトマホークって?
天ぷら
会議室デビュー日: 2007/02/13
投稿数: 5
お住まい・勤務地: 横浜
投稿日時: 2007-08-14 23:01
インギさん

> なんですかトマホークって?

jsf拡張のtomahawkのことです。
カタカナですみませんでした。
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2007-08-14 23:33
あれって確かフィルタでやってたよな、
って思って調べてみました。

org.apache.myfaces.webapp.filter.ExtensionsFilterから辿って、
MultipartRequestWrapperの88行目に、

引用:

// TODO: find a way to notify the user about the fact that the uploaded file exceeded size limit


とコメントがあるので無理っぽい気がします。
全然細かく見てないので間違ってるかもしれませんが。
天ぷら
会議室デビュー日: 2007/02/13
投稿数: 5
お住まい・勤務地: 横浜
投稿日時: 2007-08-15 00:29
あしゅさん

返信ありがとうございます。
アドバイスを参考にこんなものを発見しました。

★ソース

DiskFileUpload o = new DiskFileUpload();
o.setSizeMax(-1);
o.setSizeThreshold(1024);
o.setRepositoryPath("/tmp");
o.setHeaderEncoding("Windows-31J");
List list = o.parseRequest(request); // FileItem のリスト
for(Iterator it = list.iterator(); it.hasNext(){
FileItem param = (FileItem)it.next();
if(!param.isFormField())
continue();
out.println(param.getFieldName() + ": " + param.getString());
}

例外をキャッチできないのであれば
こんなようなソースを自分で実装する方法しかないということですね。
org.apache.myfaces.webapp.filter.ExtensionsFilter#parseRequestと似たようなことを
していますが、サブミット後、バッキングビーンにバリューバインディングされる前に
ファイル処理が走ってしまい結果、サイズオーバーになった場合は
有無を言わずに自画面に戻ってしまいます。

自画面に戻る前に何かハンドラーやフェーズリスナーなどで対応出来ないでしょうか?

<!-- Upload用フィルタ− -->
<filter>
<filter-name>extensionsFilter</filter-name>
<filter-class>
 org.apache.myfaces.component.html.util.ExtensionsFilter
</filter-class>

〜中略〜

このExtensionsFilter フィルタークラスを自分で拡張して
例外部分を自分で実装する方法しかないのでしょうか?
そもそも拡張しない方がいいクラスなのでしょうか?

1

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