FileUploadの為のAction

Uploadされると、FileUploadInterceptorによって

  • ファイルは一時ファイルとして保存される
  • MIME型、サイズがチェックされパスした要素についてパラメータ設定
  • 各file型のフィールドについて次のパラメータを追加


パラメータ名 データ型 備考
フィールド名 java.io.File型 一時ファイル
フィールド名FileName String型 クライアント側のファイルリーフ名
フィールド名ContentType String型 MIME形式

  • 次のInterceptor呼び出しをし
  • 一時ファイルを削除する

という処理がなされる。

またparametersInterceptorが後にあれば、各パラメータについて setXXX が呼ばれる。

予めUpload数が既知であれば、それぞれsetXXXを用意すればいいし、わからなければparameterをループで処理すればいい。

今回フィールドは2つと予め判っているので、受け取りのアクションは次のようになる。
tutorial.UploadAction.java

package tutorial;

import java.io.File;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts2.interceptor.validation.SkipValidation;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

/**
 * Struts2 アクションクラス
 * 
 * @author mikuni
 *
 */
public class UploadAction extends ActionSupport implements ModelDriven {
	private static final long serialVersionUID = 1870444428158165140L;
	static Log log = LogFactory.getLog(UploadAction.class);

	
	File file1;
	String file1type;
	String file1name;
	File file2;
	String file2type;
	String file2name;
		           
	public UploadAction() {
	}

	public UploadAction getModel() {
		return this;
	}
	
	@SkipValidation
	public String doNothing() {
		return SUCCESS;
	}
	public String doUpload() {
		return SUCCESS;
	}
	
	public void setFile1( File file ) {
		this.file1 = file;
	}
	public void setFile1ContentType( String type ) {
		this.file1type = type;
	}
	public void setFile1FileName( String name ) {
		this.file1name = name;
	}
	public File getFile1(  ) {
		return this.file1;
	}
	public String getFile1ContentType( ) {
		return  this.file1type;
	}
	public String getFile1FileName( ) {
		return this.file1name;
	}
	
	public void setFile2( File file ) {
		this.file2 = file;
	}
	public void setFile2ContentType( String type ) {
		this.file2type = type;
	}
	public void setFile2FileName( String name ) {
		this.file2name = name;
	}
	public File getFile2(  ) {
		return this.file2;
	}
	public String getFile2ContentType( ) {
		return  this.file2type;
	}
	public String getFile2FileName( ) {
		return this.file2name;
	}
}

Springの設定は単純なBean生成だけ

	<bean id="UploadAction" class="tutorial.UploadAction" scope="request">
	</bean>