一:表單準備html
表單頁面:java
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <form action="upload" enctype="multipart/form-data" method="post"> 請選擇文件:<input type="file" name="uploadFile"> <input type="submit" value="上傳"/> </form> </body> </html>後臺上傳處理Action:
package com.elgin.action; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import javax.servlet.ServletContext; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class UploadAction extends ActionSupport { /** * */ private static final long serialVersionUID = 1L; private File uploadFile; //注意以下2個成員變量的命名形式 private String uploadFileFileName; private String uploadFileContentType; public File getUploadFile() { return uploadFile; } public void setUploadFile(File uploadFile) { this.uploadFile = uploadFile; } public String getUploadFileFileName() { return uploadFileFileName; } public void setUploadFileFileName(String uploadFileFileName) { this.uploadFileFileName = uploadFileFileName; } public String getUploadFileContentType() { return uploadFileContentType; } public void setUploadFileContentType(String uploadFileContentType) { this.uploadFileContentType = uploadFileContentType; } public String execute() { ServletContext servletContext = ServletActionContext.getServletContext(); String desdir = servletContext.getRealPath("/UploadFiles/" + uploadFileFileName); FileInputStream fis = null; FileOutputStream fos = null; try { fis = new FileInputStream(uploadFile); fos = new FileOutputStream(desdir); byte[] buffer = new byte[1024]; int len = 0; while ((len = fis.read(buffer)) > 0) { fos.write(buffer, 0, len); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { fis.close(); fos.close(); } catch (IOException e) { e.printStackTrace(); } } return SUCCESS; } }struts.xml 配置文件:
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <package name="com" extends="struts-default"> <action name="upload" class="com.elgin.action.UploadAction"> <result name="success">/success.jsp</result> </action> </package> </struts>④ 若是在文件上傳時須要增長相關限制條件,如文件大小、類型以及擴展名 ,能夠經過給 FileUpload 攔截器配置參數來實現
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <package name="com" extends="struts-default"> <interceptors > <interceptor-stack name="fileLimit"> <interceptor-ref name="defaultStack"> <!-- 容許上傳的最大文件大小 --> <param name="fileUpload.maximumSize">1048576</param> <!-- 容許上傳的文件類型 --> <param name="fileUpload.allowedTypes">text/html,application/msword</param> <!-- 容許上傳的文件擴展名 --> <param name="fileUpload.allowedExtensions">html,xml,doc</param> </interceptor-ref> </interceptor-stack> </interceptors> <default-interceptor-ref name="fileLimit"></default-interceptor-ref> <action name="upload" class="com.elgin.action.UploadAction"> <result name="success">/success.jsp</result> <result name="input">/uploadFile.jsp</result> </action> </package> </struts>而且能夠在國際化資源文件中定製錯誤消息:
struts.messages.error.uploading - 文件上傳出錯的消息
struts.messages.error.file.too.large - 文件超過最大值的消息
struts.messages.error.content.type.not.allowed - 文件內容類型不合法的消息
struts.messages.error.file.extension.not.allowed - 文件擴展名不合法的消息
問題: 此種方式定製的消息並不完善. 能夠參考 org.apache.struts2 下的 struts-messages.properties, 能夠提供更多的定製信息.apache
注意: 在 org.apache.struts2 下的 default.properties 中有對上傳的文件總的大小的限制. 能夠使用常量的方式來修改該限制
struts.multipart.maxSize=2097152
app