ホーム » ブログ » struts2で一回を複数の画像ファイルアップロードサンプル
このエントリーをはてなブックマークに追加
@2014/05/01

スポンサーリンク
一個前の記事[struts2で画像ファイルアップロードサンプル]で一個ファイルアップロードする方法を説明した。今回の記事で複数のファイルをアップロードできる方法を紹介します。
説明:struts2を使って複数の画像ファイルを同時にアップロードする

いきなり、JSP(HTML)のソースコードです。
<html>
<head>
<title>複数画像ファイルをアップロード</title>
</head>
<body>
<form id="imageFileTransmitForm" name="imageFileTransmitForm" action="ImageFileTransmit!fileUpload.do" enctype="multipart/form-data" method="post">

<div id="upload-area">
	画像ファイル1:<input type="file" name="form.uploadFile" /> <br>
	画像ファイル2:<input type="file" name="form.uploadFile" /> <br>
	画像ファイル3:<input type="file" name="form.uploadFile" /> <br>
	画像ファイル4:<input type="file" name="form.uploadFile" /> <br>
	画像ファイル5:<input type="file" name="form.uploadFile" /> <br>
</div>

<input type="submit" value="画像をアップロードする">

</form>

</body></html>

続いて、Actionコードの抜粋:
public class ImageFileTransmitAction extends BaseAction {


	private static final long serialVersionUID = 1L;
	
	
	ImageFileTransmitForm form = new ImageFileTransmitForm();

	long fileMaxSize = 2097152;//2MB
	
	String realPath = ServletActionContext.getServletContext().getRealPath("/image");  
	
	public String doInit() throws SystemException {
		
		return INPUT;
	}

	public String doFileUpload() throws SystemException {

		List<File> uploadFiles = form.getUploadFile();
		List<String> fileNames = form.getUploadFileFileName();
		List<String> fileTypes = form.getUploadFileContentType();

		// ファイルがない場合、異常を返す
		if (null == uploadFiles || uploadFiles.size() == 0) {
			// return noFilesError;//TODO
		}
		// ファイルの拡張子が画像じゃない場合、異常を返す
		if (!isImageFiles(fileTypes)) {
			// return notImageFilesError;//TODO
		}

		// ファイルのサイズを2M以上の場合、異常を返す
		if (isSizeOver(uploadFiles)) {
			// return fileSizeOverError;//TODO
		}

		for (int i = 0; i < uploadFiles.size(); i++) {
			String uploadFileFileName = fileNames.get(i);
			// uploadFileFileName.substring(uploadFileFileName.lastIndexOf('.'));
			// 指定したPathに新たなFileを作成
			File newFile = new File(new File(realPath), uploadFileFileName);
			// ディレクトリ存在しない場合、新なディレクトリを作成
			if (!newFile.getParentFile().exists()) {
				newFile.getParentFile().mkdirs();
			}

			try {
				FileUtils.copyFile(uploadFiles.get(i), newFile);
			} catch (IOException e) {
				System.out.println("画像がアップロードできませんでした。");
				e.printStackTrace();
			}

		}

		return "uploadSuccess";
	}
	
	/**
	 * アップロードしたファイルは画像かを判断する
	 * 
	 * @param extensions
	 *            :ファイルの拡張子リスト
	 * @return
	 */
	private boolean isImageFiles(List<String> extensions) {

		for (String extension : extensions) {
			// 画像じゃない場合、falseを返す
			if (!(extension.equals("image/gif")
					|| extension.equals("image/jpeg")
					|| extension.equals("image/png")
					|| extension.equals("image/bmp")
					|| extension.equals("image/x-icon") 
					|| extension.equals("image/pjpeg"))) {
				return false;

			}
		}

		return true;
	}
	
	/**
	 * ファイルリスト中で、最大許可サイズを超えるファイルがあるかを判断
	 * 
	 * @param uploadFiles
	 * @return
	 */
	private boolean isSizeOver(List<File> uploadFiles) {

		for (File file : uploadFiles) {
			if (file.length() > fileMaxSize) {
				return true;
			}
		}

		return false;
	}



	/**
	 * @return the form
	 */
	public ImageFileTransmitForm getForm() {
		return form;
	}

	/**
	 * @param form the form to set
	 */
	public void setForm(ImageFileTransmitForm form) {
		this.form = form;
	}

}

その他、ActionFormのコードの抜粋です。
public class ImageFileTransmitForm extends BaseForm {
	/** アップロードのファイルリスト */
	private List<File> uploadFile;
	/** ファイルの拡張子リスト */
	private List<String> uploadFileContentType;
	/** ファイル名称リスト */
	private List<String> uploadFileFileName;

	/**
	 * @return the uploadFile
	 */
	public List<File> getUploadFile() {
		return uploadFile;
	}

	/**
	 * @param uploadFile
	 *            the uploadFile to set
	 */
	public void setUploadFile(List<File> uploadFile) {
		this.uploadFile = uploadFile;
	}

	/**
	 * @return the uploadFileContentType
	 */
	public List<String> getUploadFileContentType() {
		return uploadFileContentType;
	}

	/**
	 * @param uploadFileContentType
	 *            the uploadFileContentType to set
	 */
	public void setUploadFileContentType(List<String> uploadFileContentType) {
		this.uploadFileContentType = uploadFileContentType;
	}

	/**
	 * @return the uploadFileFileName
	 */
	public List<String> getUploadFileFileName() {
		return uploadFileFileName;
	}

	/**
	 * @param uploadFileFileName
	 *            the uploadFileFileName to set
	 */
	public void setUploadFileFileName(List<String> uploadFileFileName) {
		this.uploadFileFileName = uploadFileFileName;
	}

}

以上、Struts2がListを使って一回が複数の画像ファイルをアップロード機能を実装しました。

♪ 当記事がお役に立ちましたらシェアして頂ければ嬉しいです。
2人
このエントリーをはてなブックマークに追加


★ 当記事を閲覧の方は下記の【関連記事】も閲覧していました。

お名前:

 

EMAIL:

 

URL:

 

認証コード:

zanmai.net-safecode

 


※会員の方は認証コードを要らないから、新規登録をオススメ!

check