struts2でファイルアップロード(FileUpload Interceptorの設定、初期値、制限)

2010/04/24 01:39

struts2のファイルアップロード用インターセプターに関して、基本的には英語だが以下にまとめられている。

http://struts.apache.org/2.0.14/docs/file-upload.html

・struts2のFileUpload Interceptorのアップロード可能なファイルサイズ制限は、デフォルトでは2MBに設定されている。また、この値は個々ではなく複数アップロードした場合はその合計値

propertiesファイルで以下を設定することによりオーバーライド可能。

struts.multipart.maxSize=任意の数値(Byte)
※ struts.xmlに以下を追加する方法もある。
<constant name="struts.multipart.maxSize" value="任意の数値(Byte)" />

因みに最大サイズの制限を無くすには"-1"を指定する。FileUploadBase.javaのソースコードをみて頂ければ仕様がわかると思う。

また、FileUpload Intercepterで曲者なのが、org.apache.commons.fileupload.FileUploadBaseにデフォルトでハードコードされているエラーメッセージだ。無理やりAction周りでリプレイスする荒業もあるが、そんなことはしちゃ駄目だ。

このInterceptorはmultipartのリクエストを処理する段階で呼ばれる(かなり早い段階で呼ばれる)為、MultiPartRequestで行われるparseメソッド呼び出し対象クラスを自前のものに変更する。

propertiesファイルで以下を設定することにより呼び出しクラスを変更可能。デフォルトのクラスを継承したクラスに変更し、メソッドをオーバーライドしよう。

struts.multipart.parser=自前で用意したクラスのFQCN

といった具合です。

更に、一時ファイルの保存ディレクトリを変更する場合は

struts.multipart.saveDir=保存先ディレクトリ

を記述します。

 

フォームから値を取得する方法は

・File [fileName]  -- ファイルオブジェクト
・String [fileName]ContentType -- コンテンツタイプ
・String [fileName]FileName -- アップロードフォームのファイル名

のメンバ変数とセッターゲッターを用意すると、各々自動でバインドされます。
※ 別にFileオブジェクトだけでも可能。[fileName]部分は任意。

正規のドキュメントが英語のものしかない為情報が少ないですが(しかも本家にも書かれていないこともある)、struts2って素晴らしいですね。

大体は変なことをしなくても拡張可能な様に実装されていると思われます。

でもすごく気に入らない実装もあった気がするんだよなぁ。。忘れちゃったけど。

コメントを書く




biuquote
  • コメント
  • プレビュー
Loading