1. 程式人生 > >struts2 檔案上傳

struts2 檔案上傳

  1. struts2的檔案上傳功能使用的是apache下的commons-fileupload來實現。
  2. Jsp的表單要求是post提交,並且要求 enctype=”multipart/form-data”

jsp表單

<form action="upload.action" method="post" enctype="multipart/form-data">
    file:<input type="file" name="homework"/> <input type="submit" value="submit"/>
</form>

注意此處表單域名(name屬性)為 “homework

action處理類,在Action中需要提供3個屬性,一個File 型別,名稱是表單域名,其它兩個分別是表單域名+FileName,表單域名+ContentType;並且提供get/set方法,如下

public class UploadAction {
    // File變數名稱與表單name屬性,即表單域名一致,變數值為檔案
    private File homework;

    //變數名稱為 表單域名+FileName,變數值為檔名稱
    private String homeworkFileName;

    // 變數名稱為 表單域名+ContentType,變數值為檔案型別
    private String homeworkContentType;

    public String upload(){
        // 設值儲存 上傳檔案 目錄
        String path = ServletActionContext.getServletContext().getRealPath("/fileUpload");

        try {
            System.out.println(homework);
            System.out.println(homeworkFileName);
            System.out.println(homeworkContentType);
            System.out.println(path);

            FileUtils.copyFile(homework, new File(path, homeworkFileName));
            return Action.SUCCESS;
        } catch (IOException e) {
            System.out.println("file upload error");
            e.printStackTrace();
        }
        return Action.ERROR;
    }

    public File getHomework() {
        return homework;
    }

    public void setHomework(File homework) {
        this.homework = homework;
    }

    public String getHomeworkFileName() {
        return homeworkFileName;
    }

    public void setHomeworkFileName(String homeworkFileName) {
        this.homeworkFileName = homeworkFileName;
    }

    public String getHomeworkContentType() {
        return homeworkContentType;
    }

    public void setHomeworkContentType(String homeworkContentType) {
        this.homeworkContentType = homeworkContentType;
    }
}

預設情況下,只允許上上傳最大檔案為2MB,此時,配置方法如下

 <package name="default" namespace="/" extends="struts-default">
        <action name="upload" class="com.action.UploadAction" method="upload">
            <result>/success.jsp</result>
            <result name="error">/error.jsp</result>
        </action>
    </package>

我們可以自定義檔案大小限制,只需在配置檔案做修改

<struts>
    <!-- 設值上傳檔案總大小 -->
    <constant name="struts.multipart.maxSize" value="1048576000"/>
    <!-- 設值上傳檔案臨時目錄 -->
    <constant name="struts.multipart.saveDir" value="D:\1save"/>
    
    <package name="default" namespace="/" extends="struts-default">
    <action name="upload" class="com.action.UploadAction" method="upload">
        <result>/success.jsp</result>
        <result name="error">/error.jsp</result>

        <interceptor-ref name="fileUpload">
            <!-- 設值上傳單個檔案大小,單位byte -->
            <param name="maximumSize">104857600</param>
        </interceptor-ref>
        <interceptor-ref name="basicStack"/>

    </action>
</package>
</struts>