Foren: Offene Diskussion (Thread #34795)

アップロードファイルサイズ上限設定 (2013-12-03 09:53 by Anonym #70976)

ファイルアップロードのアップロードファイルサイズ上限設定について教えてください。

Web版の機能説明書を参考に
struts-config.xmlに以下のようにファイルサイズを定義してみました。
<controller processorClass="jp.terasoluna.fw.web.struts.action.RequestProcessorEx" nocache="true" maxFileSize="4M"/>

この設定で、定義サイズ以下のファイルなら正常にアップロードできるのですが、超えると処理がどこかへ飛んでいってしまっているようで、画面(ブラウザ)が真っ白になってしまいます。

memFileSize、tempDirを設定してみても状況は変わりませんでした。

例外が発生した時の処理が定義できていないような気がするのですが、
FormFileを使用するBLogicでtry catchしようにも、そこまで処理が来ていないようです。

作成した独自クラスを使って、validator name="file"を定義してみましたが、こちらでも、validatorのクラスに処理が来る前に真っ白になっているようです。

どのようにすればよいでしょうか?

Reply to #70976×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Anmelden

RE: アップロードファイルサイズ上限設定 (2013-12-03 12:08 by taromaru #70978)

ファイルサイズがmaxFileSizeを超えた場合、
アクションフォームへの反映は抑止されますが、
例外がスローされるわけではなく、
リクエスト属性「org.apache.struts.upload.MaxLengthExceeded」にBooleanのTRUEが設定されるだけです。
(Strutsの機能です。)

BLogicでサイズオーバーの判定を行う場合は、
blogic-ioのblogic-paramsにて、
<set-property property="org.apache.struts.upload.MaxLengthExceeded" source="request"
blogic-property="maxLengthExceeded" />
のようにして、
リクエスト属性「org.apache.struts.upload.MaxLengthExceeded」の値をBLogicで参照できるようにしておきます。

なお、アップロード用アクションフォームをrequestスコープにしている限り、
サイズオーバー時は、FormFileがnullになるため、
サイズオーバーチェックをしていなかった場合は、
大抵どこかの処理でNullPointerExceptionが発生し、
例外ハンドラによってエラーページに遷移するはずです。
# アップロード用アクションフォームをsessionスコープにしている場合は、
# 直前にアップロードに成功したFormFileのオブジェクトが残っているため、
# これがBLogicにわたります。
# メモリ内に展開されるような小容量のファイルであれば、データが残っているため、再度アップロードされたかのような処理を行うことになります。
# 一時ファイルに展開されるような容量のファイルであれば、FormFile#destroyの呼び忘れがない前提では、
# FormFile#getInputStreamでnullが返却されることになります。
エラーページに遷移しないということは、
NullPointerException(あるいはそのスーパークラス)がcatchされて握りつぶされているか、
オブジェクトのnullチェックを行っていて、null時の処理ルートに入っていることが考えられます。

画面(ブラウザ)が真っ白という事象は、
遷移先情報が与えられないまま、例外も発生せずに処理が終了した場合に発生するものです。
たとえば
BLogicResult#setResultStringに与えた文字列と、struts-confogでforward要素のname属性に設定した文字列が異なっていたり、
BLogicResult#setResultStringを呼び忘れていたり、
struts-confogの方で設定が漏れていたり、
といった場合に発生します。
サイズオーバー時に通りうる処理ルートを確認してみてください。

※BLogicを使用しているようなので、BLogicActionが利用されている前提で書きましたが、
Actionを自作している場合は、同じ観点で確認してください。
Reply to #70976

Reply to #70978×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Anmelden