1. 程式人生 > >Struts2多檔案的上傳

Struts2多檔案的上傳

Struts2Test.java原始碼:

package com.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;

@SuppressWarnings("serial")
public class Struts2Test extends ActionSupport{
	
	private String[] picFileName;
	private File[] pic;
	
	public String[] getPicFileName() {
		return picFileName;
	}

	public void setPicFileName(String[] picFileName) {
		this.picFileName = picFileName;
	}

	public File[] getPic() {
		return pic;
	}

	public void setPic(File[] pic) {
		this.pic = pic;
	}
		
	public String upload() throws IOException {
		for(int i=0;i<pic.length;i++){
			File upPic=new File(ServletActionContext.getServletContext().getRealPath("upload"),picFileName[i]);
			upPic.getParentFile().mkdirs();
			FileInputStream in=null;
			FileOutputStream out=null;	
			in=new FileInputStream(pic[i]);
			out=new FileOutputStream(upPic);
			byte[] byt=new byte[1024];
			int len=0;
			while((len=in.read(byt))!=-1){
				out.write(byt, 0, len);
			}
		}
		return SUCCESS;
	}	
}

struts.xml原始碼:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<package name="default" extends="struts-default" namespace="/">
	<action name="hello" class="com.test.Struts2Test" >
		<result name="success">/success.jsp</result>
	</action>
</package> 
</struts>    

web.xml原始碼:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  
  <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>
  
</web-app>

index.jsp原始碼:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
  <head>
    <base href="<%=basePath%>">
    <title>My JSP 'index.jsp' starting page</title>
  </head>
  <body>
  	<s:form action="hello!upload" enctype="multipart/form-data" method="post">
  	<!-- enctype="multipart/form-data"   此處是一個很容易忽略的盲點 -->
  		<s:file name="pic" label="上傳" />
  		<s:file name="pic" label="上傳"/>
  		<s:file name="pic" label="上傳"/>
  		<s:submit value="提交"/>
  	</s:form>
  </body>
</html>

success.jsp原始碼:
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
  <head>
    <base href="<%=basePath%>">
    <title>SUCCESS</title>
  </head>
  <body>
    SUCCESS! <br>
  </body>
</html>