1、需要commons-fileupload.jar和commons-io.jar这两个jar包
2、要求上传页面form表单method为post,enctype为multipart/form-data
<input type="file" name="image"/>
3、编写动作类
属性有要求:
private File image;//代表上传的文件
private String imageFileName;//代表上传文件的文件名
private String imageContentType;//代表上传文件的MIME类型
上传的代码可以使用commons-io。jar包中FileUtils.copyFile(src,dest);
4、struts2默认的文件上传大小是2M,我们可以在struts.xml中通过以下配置更改其上传文件的大小:
<constant name="struts.multipart.maxSize" value="10485760"></constant>
应用实例:
1、上传单个文件
上传文件的jsp页面:
<form action="${pageContext.request.contextPath}/upload1" method="post" enctype="multipart/form-data">
文件:<input type="file" name="upload"/><br/>
<input type="submit" value="go"/>
</form>
struts.xml文件配置:
<action name="upload1" class="cn.itcast.action.FileUploadAction" method="upload">
<result name="success">/uploadResult.jsp</result>
</action>
FileUploadAction如下:
package cn.itcast.action;
import java.io.File;
import javax.servlet.ServletContext;
import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class FileUploadAction extends ActionSupport {
//必须要有以下三个属性,且命名规范必须如此
private File upload;
private String uploadFileName;
private String uploadContentType;
public File getUpload() {
return upload;
}
public void setUpload(File upload) {
this.upload = upload;
}
public String getUploadFileName() {
return uploadFileName;
}
public void setUploadFileName(String uploadFileName) {
this.uploadFileName = uploadFileName;
}
public String getUploadContentType() {
return uploadContentType;
}
public void setUploadContentType(String uploadContentType) {
this.uploadContentType = uploadContentType;
}
public String upload(){
try{
ServletContext context=ServletActionContext.getServletContext();
String realPath=context.getRealPath("/upload");
File desFile=new File(realPath, uploadFileName);//目的
FileUtils.copyFile(upload, desFile);
context.setAttribute("msg", "文件上传成功!");
return "success";
}catch (Exception e) {
new RuntimeException(e);
}
return null;
}
}
最终的结果页面如下
${msg}
:
2、上传多个文件:
比上传单个文件稍微改动一点点
package cn.itcast.action;
import java.io.File;
import javax.servlet.ServletContext;
import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class FileMultiUploadAction extends ActionSupport {
private File[] upload;
private String[] uploadFileName;
private String[] uploadContentType;
public File[] getUpload() {
return upload;
}
public void setUpload(File[] upload) {
this.upload = upload;
}
public String[] getUploadFileName() {
return uploadFileName;
}
public void setUploadFileName(String[] uploadFileName) {
this.uploadFileName = uploadFileName;
}
public String[] getUploadContentType() {
return uploadContentType;
}
public void setUploadContentType(String[] uploadContentType) {
this.uploadContentType = uploadContentType;
}
public String multiUpload(){
try {
ServletContext context=ServletActionContext.getServletContext();
String path=context.getRealPath("/upload");
if(uploadFileName!=null){
for(int i=0;i<uploadFileName.length;i++){
File desFile=new File(path, uploadFileName[i]);
FileUtils.copyFile(upload[i], desFile);
}
context.setAttribute("msg", "上传成功!!");
return "success";
}
} catch (Exception e) {
new RuntimeException(e);
}
return null;
}
}
upload.jsp如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0"> </head>
<body>
<form action="${pageContext.request.contextPath }/multiUpload" method="post" enctype="multipart/form-data">
<input type="file" name="upload"/><br/>
<input type="file" name="upload"/><br/>
<input type="file" name="upload"/><br/>
<input type="submit" value="go"/>
</form>
</body>
</html>
当然要注意这是运用的struts2框架,因此要在web项目中加入该框架所需要的jar包,并在web.xml中配置其过滤器如下:
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>