アクション内で複数のファイル フィールドを配列に解析できるように、upload.jsp ページで複数のファイル フィールド オブジェクトに同じ名前を付けます。配列のサイズは同時に 1 つのファイル フィールドの数になります。フィールドは 3 つの対応する変数に解析されるため、複数のファイル フィールドは 3 つの配列に対応し、各配列のサイズはファイル フィールドの数になります。 jsp ページのコードは次のとおりです。
</form>
対応するアクションは、すべてのファイル フィールドを順番に走査し、対応する入力ファイル ストリームを生成し、対応する出力ファイル ストリームを追加して、指定されたサーバー ストレージ パスにファイルを保存します。同時にサーバー上のファイルの保存パスを動的に指定します。
アクションコードは次のとおりです。
java.io.ファイルをインポートします。
java.io.FileInputStreamをインポートします。
java.io.FileOutputStreamをインポートします。
org.apache.struts2.ServletActionContext をインポートします。
com.opensymphony.xwork2.ActionSupport をインポートします。
public class UploadAction extends ActionSupport {
プライベート文字列タイトル。
プライベート ファイル[] アップロード;
private String[] アップロードファイル名;
private String[] アップロードコンテンツタイプ;
プライベート文字列の保存パス。
public String getTitle() {
タイトルを返します。
}
public void setTitle(String title) {
this.title = タイトル;
}
public File[] getUpload() {
アップロードを返す。
}
public void setUpload(File[] アップロード) {
this.upload = アップロード;
}
public String[] getUploadFileName() {
アップロードファイル名を返します。
}
public void setUploadFileName(String[] アップロードファイル名) {
this.uploadFileName = アップロードファイル名;
}
public String[] getUploadContentType() {
アップロードコンテンツタイプを返します;
}
public void setUploadContentType(String[] UploadContentType) {
this.uploadContentType = アップロードコンテンツタイプ;
}
public String getSavePath() {
return ServletActionContext.getRequest().getRealPath(savePath);
}
public void setSavePath(String savePath) {
this.savePath = 保存パス;
}
public String Upload()throws 例外{
ファイル[] files=this.getUpload();
for(int i=0;i<files.length;i++){
FileOutputStream fos=new FileOutputStream(this.getSavePath()+"//"+this.getUploadFileName()[i]);
byte[] バッファ=新しいバイト[1024];
FileInputStream fis=new FileInputStream(files[i]);
int len=0;
while((len=fis.read(buffer))>0){
fos.write(buffer,0,len);
}
}
成功を返します。
}
}
struts.xml ファイルは次のように構成されます。ファイル アップロードのインターセプター、許可されるアップロード ファイルの種類、アップロード ファイルのサイズ制限を構成し、defaultStack インターセプターとアップロードされたファイルのサーバー上の保存場所を導入します。
</ストラット>
success.jsp ページのコードは次のとおりです。