一:表单准备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