Struts1 上传文件

来源:互联网 发布:linux常用命令全集 编辑:程序博客网 时间:2024/05/16 15:09

利用Struts上传文件是非常方便的,与smartUpload相比最大的优点在于它可以上传很大的文件,测试的时候两百多兆是可以的,四百多就不行了,它应该是有个配置,不过现在还没有搞明白。先贴一贴昨天晚上写得代码吧。
首先是上传界面的代码:

Html代码 复制代码
  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
  2. <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%>  
  3. <%   
  4. String path = request.getContextPath();   
  5. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";   
  6. %>  
  7. <html:html>  
  8.     <head>  
  9.         <title>Struts上传文件</title>  
  10.     </head>  
  11.     <body>  
  12.         <!-- 这里需要注意的是method一定要设成post,还要设置enctype为multipart/form-data-->  
  13.         <html:form action="upload" enctype="multipart/form-data" method="post">  
  14.             <table>  
  15.                 <tr>  
  16.                     <td>  
  17.                         <div>  
  18.                             <html:file property="file" size="30"></html:file>  
  19.                         </div>  
  20.                     </td>  
  21.                 </tr>  
  22.                 <tr>  
  23.                     <td>  
  24.                         <div>  
  25.                             <html:submit property="upload" value="上传"></html:submit>  
  26.                         </div>  
  27.                     </td>  
  28.                 </tr>  
  29.             </table>  
  30.         </html:form>  
  31.     </body>  
  32. </html:html>  


然后是页面对应的ActionForm,你可以写成一个普通的ActionForm,也可以写成一个动态的ActionForm,这里我写成了一个普通的ActionForm
UploadForm:

Java代码 复制代码
  1. package forms;   
  2.   
  3. import org.apache.struts.action.ActionForm;   
  4. import org.apache.struts.upload.FormFile;   
  5.   
  6. public class UploadForm extends ActionForm {   
  7.     private String filename;   
  8.     private FormFile file;   
  9.     public FormFile getFile() {   
  10.         return file;   
  11.     }   
  12.     public void setFile(FormFile file) {   
  13.         this.file = file;   
  14.     }   
  15.     public String getFilename() {   
  16.         return filename;   
  17.     }   
  18.     public void setFilename(String filename) {   
  19.         this.filename = filename;   
  20.     }   
  21.        
  22. }  


处理业务的Action:
UploadAction:

Java代码 复制代码
  1. package actions;   
  2.   
  3. import java.io.FileOutputStream;   
  4. import java.io.InputStream;   
  5. import java.io.OutputStream;   
  6.   
  7. import javax.servlet.http.HttpServletRequest;   
  8. import javax.servlet.http.HttpServletResponse;   
  9.   
  10. import org.apache.struts.action.Action;   
  11. import org.apache.struts.action.ActionForm;   
  12. import org.apache.struts.action.ActionForward;   
  13. import org.apache.struts.action.ActionMapping;   
  14. import org.apache.struts.upload.FormFile;   
  15.   
  16. import forms.UploadForm;   
  17.   
  18. public class UploadAction extends Action {   
  19.     @Override  
  20.     public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse res) throws Exception {   
  21.         UploadForm uf=(UploadForm)form;   
  22.         String filename=uf.getFilename();   
  23.         FormFile file=uf.getFile();   
  24.         if(file!=null){   
  25.             System.out.println("我叫"+file.getFileName());   
  26.         }   
  27.         //这里需要注意的是request.getRealPath();已经废弃,可以通过   
  28.                 //下面的方法来替代   
  29.         String path=req.getSession().getServletContext().getRealPath("/");   
  30.         InputStream in=file.getInputStream();   
  31.         OutputStream out=new FileOutputStream(path+"/upload/"+file.getFileName());   
  32.         int read=0;   
  33.         byte[] buffer=new byte[1024];   
  34.         while((read=in.read(buffer,0,1024))!=-1){   
  35.             out.write(buffer, 0, read);   
  36.         }   
  37.         in.close();   
  38.         out.close();   
  39.         return mapping.findForward("uploadsuc");   
  40.     }   
  41. }  


Struts-config.xml的配置:

Java代码 复制代码
  1. <form-beans>   
  2.     <form-bean name="uploadform" type="forms.UploadForm"></form-bean>   
  3. </form-beans>   
  4.     <action path="/upload"  
  5.             type="actions.UploadAction"  
  6.             name="uploadform"  
  7.             input="/test/upload.jsp"  
  8.             scope="request"  
  9.     >   
  10.         <forward name="uploadsuc" path="/test/uploadsuc.jsp"/>   
  11.     </action>