Struts2为文件上传提供了支持,借助于fileUpload拦截器,很容易实现文件上传。
index.jsp页面需注意enctype
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<form action="upload" method="post" enctype="multipart/form-data">
Choose your file
<input type="file" name="myFile"/>
<input type="submit" value="submit"/>
</form>
</body>
</html>
success.jsp页面
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
Upload file <s:property value="myFileFileName"/> succeed!
</body>
</html>
error.jsp页面
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
Upload file failed!
</body>
</html>
这都是最简单的写法,只是实现功能而已。
Action类
import java.io.File;
import org.apache.commons.io.FileUtils;
import com.opensymphony.xwork2.ActionSupport;
public class UploadFile extends ActionSupport {
/*
* 注意命名要与jsp文件中的name对应
* 假设jsp中,name为xx,那么拦截器可使用的三个参数,命名应为xx,xxFileName,xxContentType
*/
private File myFile;
private String myFileFileName;
private String myFileContentType;
@Override
public String execute() {
// TODO Auto-generated method stub
String finalPath = "E:/uploadFile";
try {
File finalFile = new File(finalPath, myFileFileName);
FileUtils.copyFile(myFile, finalFile);
} catch (Exception e) {
e.printStackTrace();
return ERROR;
}
return SUCCESS;
}
public File getMyFile() {
return myFile;
}
public void setMyFile(File myFile) {
this.myFile = myFile;
}
public String getMyFileFileName() {
return myFileFileName;
}
public void setMyFileFileName(String myFileFileName) {
this.myFileFileName = myFileFileName;
}
public String getMyFileContentType() {
return myFileContentType;
}
public void setMyFileContentType(String myFileContentType) {
this.myFileContentType = myFileContentType;
}
}
最后是struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<constant name="struts.ui.theme" value="simple" />
<constant name="struts.i18n.encoding" value="UTF-8" />
<package name="test" namespace="/" extends="struts-default">
<action name="upload" class="UploadFile">
<!-- 配置fileUpload拦截器 -->
<interceptor-ref name="fileUpload">
<!-- 文件类型 -->
<param name="allowedTypes">image/x-png,image/gif,image/pjpeg</param>
<!-- 文件大小,单位是字节-->
<param name="maximumSize">1025956</param>
</interceptor-ref>
<!-- 必须要有默认拦截器-->
<interceptor-ref name="defaultStack" />
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>
这样便可实现文件上传。