用Struts实现文件上传

    技术2022-05-11  110

    Struts的文件上传 本文用的是Struts1.1的org.apache.struts.upload.FormFile类。很方便,不用自己写。也不用写一个jsp调用jspsmartupload就可以搞定。 选择上传文件页面:selfile.jsp
    <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%> <html:html> <html:form action="/uploadsAction.do" enctype="multipart/form-data"> <html:file property="theFile"/> <html:submit/> </html:form> </html:html>
    UpLoadAction.java
    import java.io.*; import javax.servlet.http.*; import org.apache.struts.action.*; import org.apache.struts.upload.FormFile;

     

    /*** <p>Title:UpLoadAction</p>* <p>Description: QRRSMMS </p>* <p>Copyright: Copyright (c) 2004 jiahansoft</p>* <p>Company: jiahansoft</p>* @author wanghw* @version 1.0*/public class UpLoadAction extends Action {public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response)throws Exception {if (form instanceof uploadsForm) {//如果form是uploadsFormString 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();//取得上传的文件try {InputStream stream = file.getInputStream();//把文件读入String filePath = request.getRealPath("/");//取当前系统路径ByteArrayOutputStream baos = new ByteArrayOutputStream();OutputStream bos = new FileOutputStream(filePath + "/" +file.getFileName());//建立一个上传文件的输出流//System.out.println(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();}catch(Exception e){System.err.print(e);}//request.setAttribute("dat",file.getFileName());return mapping.findForward("display");}return null;}}


    UpLoadForm.java

     

    import javax.servlet.http.HttpServletRequest;import org.apache.struts.action.*;import org.apache.struts.upload.*;/*** <p>Title:UpLoadForm</p>* <p>Description: QRRSMMS </p>* <p>Copyright: Copyright (c) 2004 jiahansoft</p>* <p>Company: jiahansoft</p>* @author wanghw* @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;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;

    }}//这是相对应的form,还有其他属性可以设置,具体可以参考struts的上传例子。


    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> <form-beans> <form-bean name="uploadsForm" type="UpLoadForm" /> </form-beans> <action-mappings> <action name="uploadsForm" type="UpLoadAction" path="/uploadsAction"> <forward name="display" path="/display.jsp" /> </action> </action-mappings> </struts-config> <!--display.jsp就是随便写一个成功页-->  

    最新回复(0)