struts2 檔案上傳
阿新 • • 發佈:2018-12-19
- struts2的檔案上傳功能使用的是apache下的commons-fileupload來實現。
- 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>