在Struts2框架中,专门提供了实现文件上传和下载功能的包:commons-fileupload-版本号.jsp和commons-io-版本号.jsp,在开发Web程序时,需要将两Jar包:导入到Web工程中。
使用Struts2上传文件时,只需要使用普通的Action,但是为了获取一些上传文件的信息,如上传文件名,文件类型,需要按照一定的规则在Aciton中增加一些getter和setter方法。可以按一下步骤实现文件上传:
(1)编写上传页面,并设置form表单的编码类型。
(2)编写上传文件的Action,在该action中必须定义3个变量,即文件,文件名,文件类型。
(3)修改配置文件struts.xml,对Action进行配置
(4)文件上传过滤。
(5)编写上传成功页面。
1.编写上传页面,并设置form表单的编码类型
在文件上传的表单中,所使用的编码类型 enctype="multipart/form-data",并且数据提交方式要用post方式。假设该页面是inputFile.jsp。
<s:form action="fileupload" method="post" enctype="multipart/form-data">
<s:file name="file" lable="选择要上传的文件"/>
<s:submit value="上传"/>
</s:form>
2.编写上传文件的Action,在该action中必须定义三个变量:文件、文件名、文件类型
private File file;
private String fileFileName;
private String fileContentType;
注意:这3个变量的命名,必须按如下规则:
(1)File类型的变量名必须与表单中文件的name要相同。
(2)fileFileName,命名格式是name+"FileName"。
(3)fileContentType,命名规则是name+"ContentType"。
编写Action:FileUpLoadAction,其关键代码如下:
package Action;
import com.opensymphony.xwork2.ActionSupport;
import java.io.File;
import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;
public class FileUploadAction extends ActionSupport {
private File file;
private String fileFileName;
private String fileContentType;
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
public String getFileFileName() {
return fileFileName;
}
public void setFileFileName(String fileFileName) {
this.fileFileName = fileFileName;
}
public String getFileContentType() {
return fileContentType;
}
public void setFileContentType(String fileContentType) {
this.fileContentType = fileContentType;
}
@Override
public String execute() throws Exception {
String realPath=ServletActionContext.getServletContext().getRealPath("/file"); //取得你当前运行文件在服务器上的绝对路径
if(file!=null) {
//创建上传文件要存放的文件及其存放位置(绝对路径)
File saveFile=new File(new File(realPath),fileFileName); //上传文件存放路径
if(!saveFile.getParentFile().exists()) { //获得文件目录,判断是否存在
saveFile.getParentFile().mkdirs(); //如果文件夹不存在,创建文件夹
}
//利用commons.io包中的工具类,实现文件复制,把file拷贝发saveFile
FileUtils.copyFile(file, saveFile);
return "ok";
}
else
return "back";
}
}
3.修改配置文件struts2.xml
<action name="fileupload" class="Action.FileUploadAction">
<result name="ok">/UpLoadSuccess.jsp</result>
<result name="back">/inputFile.jsp</result>
</action>
UpLoadSuccess.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
恭喜您,上传成功!!!
</body>
</html>