struts 2マルチファイルアップロード.
2336 ワード
一.デフォルトの方法
struts 2はファイルuploadをデフォルトパッケージ化しており、使いやすいです.
私は1つのプロジェクトで次のコードでマルチファイルのアップロードを実現しました.
Actionでは、以下の行を定義するだけでアップロードされたファイルのリストを取得できます.
次はuploadを判断して、次のように実現しました...暗いバグを犯しました
ユーザーは順番に3枚の画像を転送してもいいですが、2番目のファイルだけを転送すればいいですか?取ったのはupload[1]だけで、理論的なdoBではなくdoAが実行される.
二.改良されたロジック
実はマルチファイルのアップロードに対して、以下のような実現方式を考えるともっと良いかもしれません:ラベル
アクションで定義:
マルチファイルを別々に処理し、struts 2はラベルのように自動的にfile情報にカプセル化できる
struts 2はファイルuploadをデフォルトパッケージ化しており、使いやすいです.
私は1つのプロジェクトで次のコードでマルチファイルのアップロードを実現しました.
<form action="xx.action" method="post" enctype="multipart/form-data">
:<input type="file" name="upload" /><br>
:<input type="file" name="upload" /><br>
:<input type="file" name="upload" /><br>
<input value=" " type="submit" />
</form>
Actionでは、以下の行を定義するだけでアップロードされたファイルのリストを取得できます.
public class xxAction extends ActionSupport
{
private File[] upload;
private String[] uploadContentType;
private String[] uploadFileName;
//getter&setter
}
次はuploadを判断して、次のように実現しました...暗いバグを犯しました
if (upload != null) {
if (upload[1] != null) { //
doA
}
if (upload.length>2 && upload[2] != null) { //
doB
}
if (upload.length>3 && upload[3] != null) { //
doC
}
}
ユーザーは順番に3枚の画像を転送してもいいですが、2番目のファイルだけを転送すればいいですか?取ったのはupload[1]だけで、理論的なdoBではなくdoAが実行される.
二.改良されたロジック
実はマルチファイルのアップロードに対して、以下のような実現方式を考えるともっと良いかもしれません:
:<s:file name="upload1" />
:<s:file name="upload2" />
:<s:file name="upload3" />
アクションで定義:
public class xxxAction extends ActionSupport {
// file upload
private File upload1; //
private String upload1ContentType; //
private String upload1FileName; //
private File upload2; //
private String upload2ContentType; //
private String upload2FileName; //
private File upload3; //
private String upload3ContentType; //
private String upload3FileName; //
//getter &&setter
}
マルチファイルを別々に処理し、struts 2は