北在北方

太白枝头看,花开不计年,杯中浮日月,楼外是青天。

导航

Struts2多文件上传

Posted on 2012-06-27 21:56  CN.programmer.Luxh  阅读(544)  评论(0)    收藏  举报

  Struts2上传多文件也很简单。在Action中把文件对应的属性用数组或者集合接收就可以了。

  File[] file; 

  String[] fileFileName;

  String[] fileContentType;

  1、FileUploadAction的代码

package cn.luxh.struts2.action;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.io.FileUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;


/**
 * 上传文件
 * @author Luxh
 */
public class FileUploadAction extends ActionSupport {

	private static final long serialVersionUID = 2642160699551232611L;
	
	private static Log LOG = LogFactory.getLog(FileUploadAction.class);
	
	protected File[] file;
	protected String[] fileFileName;
	protected String[] fileContentType;
	
	
	/**
	 * 上传文件
	 */
	public String upload() {
		try {
			File[] files = uploadFile("/upload");
			//after get files
			//do some work
			//...
		}catch(Exception e) {
			LOG.error("上传文件出错!");
			throw new RuntimeException("上传文件出错");
		}
		return SUCCESS;
	}
	
	/**
	 *	处理上传的文件
	 * @param saveDir
	 * @return 
	 * @throws IOException 
	 */
	public File[] uploadFile(String saveDir) throws IOException {
		if(saveDir==null ||"".equals(saveDir.trim())) {
			saveDir = "/upload";
		}
		File[] files = null;
		if(file != null && file.length > 0) {
			String saveDirPath = ServletActionContext.getServletContext().getRealPath(saveDir);
			File dirFile = new File(saveDirPath);
			if(!dirFile.exists()) {
				dirFile.mkdir();
			}
			files = new File[file.length];
			for(int i=0;i<file.length;i++) {
				if(file[i] != null) {
					String newFileName = generateFileName(fileFileName[i]);
					File destFile = new File(saveDirPath,newFileName);
					FileUtils.copyFile(file[i], destFile);
					files[i] = destFile;
				}
			}
		}
		return files;
	} 
	
	/**
	 * 	生成文件名
	 * @param fileName
	 * @return
	 */
	private String generateFileName(String fileName) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
		String formatDate = sdf.format(new Date());
		int position = fileName.lastIndexOf("."); 
		String extension = "";
		if(position!=-1) {
			extension = fileName.substring(position); 
		}
		return formatDate + extension;     
	}
	
	public File[] getFile() {
		return file;
	}
	public void setFile(File[] file) {
		this.file = file;
	}
	public String[] getFileFileName() {
		return fileFileName;
	}
	public void setFileFileName(String[] fileFileName) {
		this.fileFileName = fileFileName;
	}
	public String[] getFileContentType() {
		return fileContentType;
	}
	public void setFileContentType(String[] fileContentType) {
		this.fileContentType = fileContentType;
	}

}

 

  

 

  2、上传页面upload.jsp

<form  action="${pageContext.request.contextPath}/fileUpload/upload" method="post" enctype="multipart/form-data">
			<table>
				 <tr>
			         <td>
			         		请选择文件:
			         </td>
			     </tr>
			     <tr>
			         <td>
			             <input type="file" name="file">
			         </td>
			     </tr>
			     <tr>
			         <td>
			             <input type="file" name="file">
			         </td>
			     </tr>
			     <tr>
			         <td>
			             <input type="file" name="file">
			         </td>
			     </tr>
			</table>
			<tr>
				<td>
					<input type="submit" value="Submit" id="submit">
				</td>
			</tr>
</form>

  3、配置文件struts.xml

<action name="upload" class="cn.luxh.struts2.action.FileUploadAction" method="upload">
            <result>/WEB-INF/pages/common/success.jsp</result>
</action>