文件上傳的功能在Struts2中也得到了非常好的封裝,主要使用的是fileUpload上傳組件。
我使用的開發工具是:MyEclipse8.5
Web服務器:Tomcat6
Struts版本: struts-2.2.1
JDK版本:JDK1.6.0_21
J2EE版本:Java EE5.0
新建一個webproject,將struts的jar包粘貼到WEB-INF下的lib下(搭建環境),只需這幾個jar包就可以了:
commons-fileupload-1.2.1.jar
commons-io-1.3.2.jar
commons-logging-1.0.4.jar
freemarker-2.3.15.jar
ognl-2.7.3.jar
struts2-core-2.1.8.jar
xwork-core-2.1.6.jar
其代碼如下:
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page isELIgnored="false"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body>
<s:form action="aa.action" method="post" enctype="multipart/form-data">
<s:file name="uploadFile"></s:file>
<br />
<s:submit value="提交"></s:submit>
</s:form>
</body>
</html>
配置文件
struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
<package name="struts3.1" extends="struts-default">
<action name="aa" class="controller.Register">
<result name="register">/showregister.jsp</result>
<result name="input">/index.jsp</result>
</action>
</package>
<constant name="struts.ui.theme" value="simple"></constant>
</struts>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<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>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
struts.properties
#設置最大的上傳文件的大小
struts.multipart.maxSize=2048000000
#設置最大的上傳文件的臨時目錄
struts.multipart.saveDir=/tempUploadFile
Register.java
package controller;
import java.io.File;
import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class Register extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = 1L;
public File getUploadFile() {
return uploadFile;
}
public void setUploadFile(File uploadFile) {
this.uploadFile = uploadFile;
}
private File uploadFile;//對應表單裏的 name="uploadFile"
private String uploadFileFileName;//必須是以類型爲File的變量名後面加上FileName
public String getUploadFileFileName() {
return uploadFileFileName;
}
public void setUploadFileFileName(String uploadFileFileName) {
this.uploadFileFileName = uploadFileFileName;
}
@Override
public void validate() {
}
@SuppressWarnings("deprecation")
public String execute() {
try {
//取得上傳後文件要存放的路徑
String targetDirectory = ServletActionContext.getRequest().getRealPath(
"/upload");//存儲到apache項目發佈目錄上
String targetDirectory="D:\\a1/upload";//存儲到項目文件夾裏
//生成上傳的File文件
File file = new File(targetDirectory, uploadFileFileName);
//複製File對象,從而實現上傳文件
FileUtils.copyFile(uploadFile, file);
} catch (Exception e) {
e.printStackTrace();
}
return "register";
}
}
showregister.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body>
上傳成功!
</body>
</html>