Struts2:多文件上傳

源碼下載地址: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來設置上傳文件的大小限制,如上述代碼所示。






發佈了40 篇原創文章 · 獲贊 7 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章