源碼下載地址:http://download.csdn.net/detail/zhoujing_0424/9239429
在Struts2中實現多文件上傳,分爲三步:
1.第一步
在WEB-INF/lib下加入commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar,這兩個文件可以從http://commons.apache.org下載。
2.第二步
把form表的enctype設置爲multipart/form-data,本例中myform.jsp代碼如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>My JSP 'myform.jsp' starting page</title>
</head>
<body>
<form enctype="multipart/form-data" action="${pageContext.request.contextPath}/control/helloworld_execute.action" method="post">
文件1:<input type="file" name="upLoadImage"><br>
文件2:<input type="file" name="upLoadImage"><br>
<input type="submit" value="上傳">
</form>
</body>
</html>
注意:input中的name值應相同,且與對應Action類中的相應屬性同名。
3.第三步
在Action類中添加以下屬性,屬性對應於表單中文件字段的名稱。本例中HelloWorldAction.java代碼如下:
package cn.zj.action;
import java.io.File;
import org.apache.commons.io.FileUtils;
import com.opensymphony.xwork2.ActionContext;
public class HelloWorldAction {
private File[] upLoadImage;
private String[] upLoadImageFileName;//得到上傳文件的名稱
public File[] getUpLoadImage() {
return upLoadImage;
}
public void setUpLoadImage(File[] upLoadImage) {
this.upLoadImage = upLoadImage;
}
public String[] getUpLoadImageFileName() {
return upLoadImageFileName;
}
public void setUpLoadImageFileName(String[] upLoadImageFileName) {
this.upLoadImageFileName = upLoadImageFileName;
}
public String execute() throws IOException{
String realPath=ServletActionContext.getServletContext().getRealPath("/images");
if(upLoadImage!=null){
File saveDir=new File(realPath);
if(!saveDir.exists()) saveDir.mkdirs();
for(int i=0;i<upLoadImage.length;i++){
File saveFile=new File(saveDir,upLoadImageFileName[i]);
FileUtils.copyFile(upLoadImage[i], saveFile);
}
ActionContext.getContext().put("message", "上傳成功");
}
return "success";
}
}
hello.jsp用於顯示文件是否上傳成功,代碼如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>My JSP 'hello.jsp' starting page</title>
</head>
<body>
${requestScope.message } <br>
</body>
</html>
struts.xml文件中的配置如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- 通過struts.action.extension常量修改默認URL後綴.action爲.do或.action -->
<constant name="struts.action.extension" value="do,action"></constant>
<!-- 設置上傳文件的大小限制 -->
<constant name="struts.multipart.maxSize" value="10701096"></constant>
<!-- 當struts配置文件修改後,系統是否重新加載該文件,默認值爲false,開發階段最好打開,這樣就無需經常restart server -->
<constant name="struts.configuration.xml.reload" value="true"></constant>
<package name="zj" namespace="/control" extends="struts-default<span style="font-family: Arial, Helvetica, sans-serif;">"> </span>
<!-- dispatcher內部請求轉發方式 -->
<action name="helloworld_*" class="cn.zj.action.HelloWorldAction" method="{1}"> <!-- 使用通配符指定action的method -->
<result name="success">/WEB-INF/page/hello.jsp</result>
</action>
</package>
</struts>
在瀏覽器地址欄中輸入http://localhost:8080/Struts2/myform.jsp,選擇文件並點擊“上傳”,若上傳成功,則跳轉到http://localhost:8080/Struts2/control/helloworld_execute.action,顯示“上傳成功”。若文件超過大小限制,則可通過在struts.xml文件中修改常量struts.multipart.maxSize來設置上傳文件的大小限制,如上述代碼所示。