最近在做Struts项目时遇到了上传多个文件的问题。在网上查了不少资料,也没有找到用Struts上传多个文件的例子。我经过几天的研究,实现了用Struts上传多个文件的功能。现在贴出来让大家共享! 一。建立ActionFormpackage com.cnehu.struts.form;import javax.servlet.http.HttpServletRequest;import org.apache.struts.action.ActionError;import org.apache.struts.action.ActionErrors;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionMapping;import org.apache.struts.upload.FormFile;import org.apache.struts.upload.MultipartRequestHandler;/** * <p> * Title:UpLoadForm * </p> * <p> * Copyright: Copyright (c) 2005 techyang http://blog.csdn.net/techyang * </p> * @author techyang * @version 1.0 */public class UpLoadForm extends ActionForm{ public static final String ERROR_PROPERTY_MAX_LENGTH_EXCEEDED = "org.apache.struts.webapp.upload.MaxLengthExceeded"; protected FormFile theFile; protected FormFile theFile2; public FormFile getTheFile() { return theFile; } public void setTheFile(FormFile theFile) { this.theFile = theFile; } public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { ActionErrors errors = null; //has the maximum length been exceeded? Boolean maxLengthExceeded = (Boolean) request .getAttribute(MultipartRequestHandler.ATTRIBUTE_MAX_LENGTH_EXCEEDED); if ((maxLengthExceeded != null) && (maxLengthExceeded.booleanValue())) { errors = new ActionErrors(); errors.add(ERROR_PROPERTY_MAX_LENGTH_EXCEEDED, new ActionError( "maxLengthExceeded")); } return errors; } /** * @return Returns the theFile2. */ public FormFile getTheFile2() { return theFile2; } /** * @param theFile2 The theFile2 to set. */ public void setTheFile2(FormFile theFile2) { this.theFile2 = theFile2; }}
二。建立ActionServletpackage com.cnehu.struts.action;import java.io.*;import javax.servlet.http.*;import org.apache.struts.action.*;import org.apache.struts.upload.FormFile;import com.cnehu.struts.form.UpLoadForm;/** * <p> * Title:UpLoadAction * </p> * <p> * Copyright: Copyright (c) 2005 techyang http://blog.csdn.net/techyang * </p> * @author techyang * @version 1.0 */
public class UpLoadAction extends Action{ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { String encoding = request.getCharacterEncoding(); if ((encoding != null) && (encoding.equalsIgnoreCase("utf-8"))) { response.setContentType("text/html; charset=gb2312");//如果没有指定编码,编码格式为gb2312 } UpLoadForm theForm = (UpLoadForm) form; FormFile file = theForm.getTheFile();//取得上传的文件 FormFile file2=theForm.getTheFile2(); try { /* * 取当前系统路径D:/Tomcat5/webapps/coka/ 其中coka 为当前context */ String filePath = this.getServlet().getServletContext() .getRealPath("/"); InputStream stream = file.getInputStream();//把文件读入 ByteArrayOutputStream baos = new ByteArrayOutputStream(); /* * 建立一个上传文件的输出流 如果是linux系统请把UploadFiles后的"//"换成"/" */ OutputStream bos = new FileOutputStream(filePath + "UploadFiles//"+file.getFileName()); //D:/Tomcat5/webapps/coka/UploadFiles/DSC01508.JPG /* System.out.println(filePath + "UploadFiles//"+file.getFileName()); System.out.println(filePath);*/ request.setAttribute("fileName",filePath + "/" + file.getFileName()); int bytesRead = 0; byte[] buffer = new byte[8192]; while ((bytesRead = stream.read(buffer, 0, 8192)) != -1) { bos.write(buffer, 0, bytesRead);//将文件写入服务器 } bos.close(); stream.close();
InputStream stream2 = file2.getInputStream();//把文件读入 ByteArrayOutputStream baos2 = new ByteArrayOutputStream(); OutputStream bos2 = new FileOutputStream(filePath + "UploadFiles//"+file2.getFileName());//建立一个上传文件的输出流 int bytesRead2 = 0; byte[] buffer2 = new byte[8192]; int i=0; while ((bytesRead2 = stream2.read(buffer2, 0, 8192)) != -1) { bos2.write(buffer2, 0, bytesRead2);//将文件写入服务器 } bos2.close(); stream2.close(); } catch (Exception e) { System.err.print(e); } return mapping.findForward("display"); }}
三。建立上传用的JSP文件 upload.jsp<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %><html:html><head><title>用Struts上传文件</title></head><body><html:form action="/uploadsAction" enctype="multipart/form-data"><html:file property="theFile"/><html:file property="theFile2"/><html:submit/></html:form></body></html:html>
四。配置struts-config.xml文件<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd"><struts-config> <data-sources /> <form-beans > <form-bean name="uploadsForm" type="com.cnehu.struts.form.UpLoadForm" /> </form-beans> <global-exceptions /> <global-forwards > </global-forwards> <action-mappings > <action name="uploadsForm" type="com.cnehu.struts.action.UpLoadAction" path="/uploadsAction"> <forward name="display" path="/display.jsp" /> </action> </action-mappings> </struts-config>全文完!