一個前の記事[
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を使って一回が複数の画像ファイルをアップロード機能を実装しました。
♪ 当記事がお役に立ちましたらシェアして頂ければ嬉しいです。
★ 当記事を閲覧の方は下記の【関連記事】も閲覧していました。
zanmai @2016年03月31日
» ①②③④の順で設定できるはず。…