Strutsファイルのアップロードの例

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
ファイルを選択し、送信ボタンをクリックします。

Struts-file-upload-example1

http://localhost:8080/StrutsExample/Upload.do
display.jspに転送され、アップロードされたファイルの詳細が表示されます。

Struts-file-upload-example2