html5で複数ファイルアップロード(SAStruts)その3
チュートリアルに存在するファイルアップロードをベースとして機能を拡充していく。
前回、解析を終えて、テキストパラメータはいい感じに配列にしてくれるけど、 FormFileは複数のパラメータがひとつのフォーム名で送られることを想定していない様子だった。
今回は解決編。 テキストパラメータの記述をパクってやりましょう!
S2MultipartRequestHandlerの拡張クラスを作ります。
S2MultipartRequestHandlerCustom.java
package net.negimiso.struts.upload; import org.apache.commons.fileupload.FileItem; import org.apache.struts.upload.FormFile; import org.seasar.struts.upload.S2MultipartRequestHandler; public class S2MultipartRequestHandlerCustom extends S2MultipartRequestHandler { @SuppressWarnings("unchecked") @Override protected void addFileParameter(FileItem item) { // FormFile formFile = new S2FormFile(item); // // elementsFile.put(item.getFieldName(), formFile); // elementsAll.put(item.getFieldName(), formFile); String name = item.getFieldName(); FormFile value = new S2FormFile(item); FormFile[] oldArray = (FormFile[]) elementsFile.get(name); FormFile[] newArray; if (oldArray != null) { newArray = new FormFile[oldArray.length + 1]; System.arraycopy(oldArray, 0, newArray, 0, oldArray.length); newArray[oldArray.length] = value; } else { newArray = new FormFile[] { value }; } elementsFile.put(name, newArray); elementsAll.put(name, newArray); } }
必要最低限のオーバーライド。 やってる事はテキストフィールドのそれと同じ。 基本的に単一だろうと複数だろうと配列として保存しておく。
次は、作成したハンドラクラスを読み込んでもらうように、 Struts設定ファイルを修正。
<controller maxFileSize="1024M" bufferSize="1024" processorClass="org.seasar.struts.action.S2RequestProcessor" multipartClass="net.negimiso.struts.upload.S2MultipartRequestHandlerCustom"/>
これで一通りの対策は完了。 文字に起こすとアッサリしてるなぁ。。。
最後に動作確認。
おーほんとに上がった。 よかったよかった。
完
(うーん、こんな修正でいいのか?)