基于struts 的FormFile实现文件的上传功能

 第一步:首先建个上传文件的简单的界面,代码如下:文件名(FileUpload.jsp)

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"%>  
  2. <html>  
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  5. <title>文件上传</title>  
  6. <mce:script type="text/javascript"><!--  
  7. function apply(){  
  8.     var f=document.getElementById("form1");  
  9.     var file=document.getElementById("file");  
  10.     if(file.value!=''){  
  11.         f.submit();  
  12.     }else{  
  13.         alert('请选择要上传的文件');  
  14.         return false;  
  15.     }  
  16.       
  17. }  
  18. // --></mce:script>   
  19. </head>  
  20. <body>  
  21. <form id="form1" action="/FileUpload.do" method="post" enctype="multipart/form-data">  
  22.    <table align="center">  
  23.    <tr><td>  
  24.     <input type="file" id="uploadFile" name="uploadFile" size="12" value=" "> <p> </td>  
  25.     </tr>  
  26.     <tr><td>  
  27.     <input οnclick="apply();return false;" type="submit" value="上传文件"></td>  
  28.    </tr>  
  29.    </table>  
  30. </form>  
  31. </body>  
  32. </html>  

第二步:建立一个ActionForm,代码如下:文件名(FileUploadForm.java)

  1. package com.form;  
  2. import org.apache.struts.action.ActionForm;  
  3. import org.apache.struts.upload.FormFile;  
  4. public class FileUploadForm extends ActionForm {  
  5.     private FormFile uploadFile;  
  6.     public FormFile getUploadFile() {  
  7.         return uploadFile;  
  8.     }  
  9.     public void setUploadFile(FormFile uploadFile) {  
  10.         this.uploadFile = uploadFile;  
  11.     }  
  12. }  

第三步:创建Action,代码如下,文件名(FileUploadAction)

  1. package com.action;  
  2. import java.io.FileNotFoundException;  
  3. import java.io.FileOutputStream;  
  4. import java.io.IOException;  
  5. import java.io.InputStream;  
  6. import java.io.OutputStream;  
  7. import javax.servlet.http.HttpServletRequest;  
  8. import javax.servlet.http.HttpServletResponse;  
  9. import org.apache.struts.action.Action;  
  10. import org.apache.struts.action.ActionForm;  
  11. import org.apache.struts.action.ActionForward;  
  12. import org.apache.struts.action.ActionMapping;  
  13. import org.apache.struts.upload.FormFile;  
  14. import com.form.FileUploadForm;  
  15. public class FileUploadAction extends Action {  
  16.     public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {  
  17.         FileUploadForm uploadForm=(FileUploadForm) form;  
  18.         FormFile uploadFile=uploadForm.getUploadFile();  
  19.         //得到文件的名字   
  20.         String fileName=uploadFile.getFileName();  
  21.         //得到文件的大小   
  22.         int fileSize=uploadFile.getFileSize();  
  23.         //得到文件的输入流   
  24.         InputStream is=uploadFile.getInputStream();  
  25.         uploadFile(fileName,is);  
  26.         return mapping.findForward("index");  
  27.     }  
  28.     /** 
  29.      * 上传文件 
  30.      * @param fileName 
  31.      * @param is 
  32.      */  
  33.     private void uploadFile(String fileName, InputStream is) {  
  34.           
  35.         try {  
  36.             //设置上传文件要保存的路径   
  37.             OutputStream os=new FileOutputStream("E:/save/"+fileName);  
  38.             //设置一个Buffer用来缓存数据   
  39.             byte[] buffer=new byte[1024*1024];  
  40.             int len;  
  41.             while((len=is.read(buffer))!=-1){  
  42.                 //将缓存的数据写到磁盘   
  43.                 os.write(buffer,0,len);  
  44.             }  
  45.             //关闭流   
  46.             os.close();  
  47.             is.close();  
  48.         } catch (FileNotFoundException e) {  
  49.             e.printStackTrace();  
  50.         } catch (IOException e) {  
  51.             e.printStackTrace();  
  52.         }         
  53.     }  
  54. }  

第四步:写strust的配置文件struts-config.xml,代码如下:

  1. <?xml version="1.0" encoding="ISO-8859-1" ?>  
  2. <!DOCTYPE struts-config PUBLIC  
  3.           "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"  
  4.           "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">  
  5. <struts-config>  
  6.  <form-beans>  
  7.   <form-bean name="upload" type="com.form.FileUploadForm" />  
  8.  </form-beans>  
  9. <action-mappings>  
  10.   <action path="/FileUpload" type="com.action.FileUploadAction" name="upload" />  
  11.   </action-mappings>  
  12. <controller      processorClass="org.apache.struts.tiles.TilesRequestProcessor"/>  
  13.  <message-resources parameter="resources.application" />  

经过以上四步,开始运行,要是上传的文件名是中文会报异常的,为此加上过滤器。

第五步:加上过滤器:代码如下:

在web.xml中加上下面的代码

  1. <filter>  
  2.            <filter-name>GlobalFilter</filter-name>  
  3.            <filter-class>com.filter.GlobalFilter</filter-class>  
  4.       </filter>  
  5.     <filter-mapping>  
  6.       <filter-name>GlobalFilter</filter-name>  
  7.       <url-pattern>/*</url-pattern>  
  8.     </filter-mapping>  

com.filter.GlobalFilter代码如下:

  1. package com.filter;  
  2. import java.io.IOException;  
  3. import javax.servlet.Filter;  
  4. import javax.servlet.FilterChain;  
  5. import javax.servlet.FilterConfig;  
  6. import javax.servlet.ServletException;  
  7. import javax.servlet.ServletRequest;  
  8. import javax.servlet.ServletResponse;  
  9. public class GlobalFilter implements Filter{  
  10.       
  11.     public void init(FilterConfig filterConfig) throws ServletException{  
  12. System.out.println("===========in the filter==========");  
  13.     }  
  14.     public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException,ServletException{  
  15.         try{  
  16.             request.setCharacterEncoding("UTF-8");  
  17.             chain.doFilter(request,response);  
  18.         }catch(Exception e){  
  19.             e.printStackTrace();  
  20.         }  
  21.     }  
  22.     public void destroy() {           
  23.     }  
  24. }  

经过以上的五步,文件的上传功能就实现了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值