前提:java+struts2、且つ、commons-fileupload-1.x.x.jarとcommons-io-2.x.x.jarはすでにWebContent\WEB-INF\lib\に配置。
例:画像ファイルをアップロード(一回で1つのファイル)
いきなり、JSP(HTML)ソースコードの抜粋
<html>
<head>
<title>画像アップロード</title>
</head>
<body>
<form id="imageFileTransmitForm" name="imageFileTransmitForm" action="ImageFileTransmit!fileUpload.do" enctype="multipart/form-data" method="post">
<table width="90%" border="0" cellspacing="2" cellpadding="3" align="center">
<tr bgcolor="f5f5f5">
<td width="22%">
<div align="right">画像:</div>
</td>
<td width="78%">
<input type="file" name="form.uploadFile" />
</td>
</tr>
</table>
<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 {
String uploadFileFileName = form.getUploadFileFileName();
//uploadFileFileName = uploadFileFileName.substring(uploadFileFileName.lastIndexOf('.'));
//イメージファイルじゃない場合、異常を返す
if(!isImageFile(form.getUploadFileContentType())) {
// return error;//TODO
}
// 空ファイル、またはファイルサイズ2M以上の場合、異常を返す
if(form.getUploadFile() == null || form.getUploadFile().length()>fileMaxSize) {
// return maxSizeError;//TODO
}
File filePath = new File(new File(realPath), uploadFileFileName);
// ディレクトリ存在しない場合、新なディレクトリを作成
if(!filePath.getParentFile().exists()) {
filePath.getParentFile().mkdirs();
}
try {
// ★コピーを実施
FileUtils.copyFile(form.getUploadFile(), filePath);
} catch (IOException e) {
System.out.println("画像がアップロードできませんでした。");
e.printStackTrace();
}
return "uploadSuccess";
}
/**
*
* @param extension
* ファイルの拡張子
* @return
*/
private boolean isImageFile(String extension) {
return (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 the form
*/
public ImageFileTransmitForm getForm() {
return form;
}
/**
* @param form the form to set
*/
public void setForm(ImageFileTransmitForm form) {
this.form = form;
}
}
その他、actionFormのコードの抜粋
package jp.guider.tool.demo.form;
import java.io.File;
public class ImageFileTransmitForm extends BaseForm {
/** ファイル */
private File uploadFile;
/** ファイルの拡張子 */
private String uploadFileContentType;
/** ファイル名称 */
private String uploadFileFileName;
/**
* @return the uploadFile
*/
public File getUploadFile() {
return uploadFile;
}
/**
* @param uploadFile
* the uploadFile to set
*/
public void setUploadFile(File uploadFile) {
this.uploadFile = uploadFile;
}
/**
* @return the uploadFileContentType
*/
public String getUploadFileContentType() {
return uploadFileContentType;
}
/**
* @param uploadFileContentType
* the uploadFileContentType to set
*/
public void setUploadFileContentType(String uploadFileContentType) {
this.uploadFileContentType = uploadFileContentType;
}
/**
* @return the uploadFileFileName
*/
public String getUploadFileFileName() {
return uploadFileFileName;
}
/**
* @param uploadFileFileName
* the uploadFileFileName to set
*/
public void setUploadFileFileName(String uploadFileFileName) {
this.uploadFileFileName = uploadFileFileName;
}
}
以上で非常に簡単に、Struts2で画像ファイルをアップロード機能が実現しました。
※複数の画像ファイルを一括でアップロードする方法もあります。後程、別の記事で掲載します。
♪ 当記事がお役に立ちましたらシェアして頂ければ嬉しいです。
★ 当記事を閲覧の方は下記の【関連記事】も閲覧していました。
zanmai @2016年03月31日
» ①②③④の順で設定できるはず。…