Strutsファイルのアップロードの例
このチュートリアルでは、Struts<html:file>タグを使用してファイルをサーバーファイルシステムにアップロードする方法を学習します。
このStrutsファイルのアップロード例をダウンロード–Struts-FileUpload-Example.zip
1. アクションフォーム
アクションフォームで、アップロードされたファイルを保持するためのorg.apache.struts.upload.FormFile変数と、アップロードされたファイルのフォーム検証を作成します。
package com.example.common.form; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionMessage; import org.apache.struts.upload.FormFile; public class FileUploadForm extends ActionForm{ private FormFile file; public FormFile getFile() { return file; } public void setFile(FormFile file) { this.file = file; } @Override public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { ActionErrors errors = new ActionErrors(); if( getFile().getFileSize()== 0){ errors.add("common.file.err", new ActionMessage("error.common.file.required")); return errors; } //only allow textfile to upload if(!"text/plain".equals(getFile().getContentType())){ errors.add("common.file.err.ext", new ActionMessage("error.common.file.textfile.only")); return errors; } //file size cant larger than 10kb System.out.println(getFile().getFileSize()); if(getFile().getFileSize() > 10240){ //10kb errors.add("common.file.err.size", new ActionMessage("error.common.file.size.limit", 10240)); return errors; } return errors; } }
2. アクション
Actionクラスでは、アップロードしたファイルを取得してサーバーファイルシステムに保存し、新しく作成したファイルの詳細を後で使用できるようにセッションに保存します。
package com.example.common.action; import java.io.File; import java.io.FileOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.upload.FormFile; import com.example.common.form.FileUploadForm; public class FileUploadAction extends Action{ @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { FileUploadForm fileUploadForm = (FileUploadForm)form; FormFile file = fileUploadForm.getFile(); //Get the servers upload directory real path name String filePath = getServlet().getServletContext().getRealPath("/") +"upload"; //create the upload folder if not exists File folder = new File(filePath); if(!folder.exists()){ folder.mkdir(); } String fileName = file.getFileName(); if(!("").equals(fileName)){ System.out.println("Server path:" +filePath); File newFile = new File(filePath, fileName); if(!newFile.exists()){ FileOutputStream fos = new FileOutputStream(newFile); fos.write(file.getFileData()); fos.flush(); fos.close(); } request.setAttribute("uploadedFilePath",newFile.getAbsoluteFile()); request.setAttribute("uploadedFileName",newFile.getName()); } return mapping.findForward("success"); } }
3. JSP
<html:form>タグのエンコードタイプを「multipart/form-data」に設定し、HTTPメソッドを「post」として指定する必要があります。
fileupload.jsp
+ : + +
display.jsp
File uploaded to : "> Click here to download it
4. struts-config.xml
すべて一緒にリンクする
試して
http://localhost:8080/StrutsExample/UploadPage.do
ファイルを選択し、送信ボタンをクリックします。
http://localhost:8080/StrutsExample/Upload.do
display.jspに転送され、アップロードされたファイルの詳細が表示されます。