对commons fileupload组件的简单封装

        在上一篇文章《利用Jakarta commons fileupload组件实现多文件上传》中,我介绍了commons fileupload组件的基本原理和实现方法。但是在实际操作中,我们需要分析每个FileItem,然后从该FileItem中读取该控件的name和value,显然这不符合我们的习惯。比如我们在页面上有个text文本框:
对commons fileupload组件的简单封装<input type="text" name="possess">
    我们要取得possess传过来的value,一般我们是这么写的:
对commons fileupload组件的简单封装String possess = request.getParameter("possess")
    但是在commons fileupload中我们却需要这么处理:
对commons fileupload组件的简单封装        DiskFileItemFactory factory = new DiskFileItemFactory();
对commons fileupload组件的简单封装        
//Create a new file upload handler
对commons fileupload组件的简单封装
        ServletFileUpload upload = new ServletFileUpload(factory);
对commons fileupload组件的简单封装        String possess 
= "";
        }
      按照上面处理的话,很是不爽,因此我想包装一下,使得使用起来符合我们的习惯。
总体设计思想:
1.我们可以像以前那样,传入控件的name,就可以取得该控件的value,因此我想可以遍历所有FileItem,然后把他们存入一个Map中(key中存入fieldname,value中存入该控件的value),这样就可以达到以上目的了。
2.在该包装类中,我们还要可以设置一些值,从而我们可以更改commons fileupload中的一些配置。
具体实现:
   根据以上要求,我写出了一个MutiFileUpload类,代码如下,稍后再做详细解释。
对commons fileupload组件的简单封装package chb.commons.fileupload.web;
对commons fileupload组件的简单封装
对commons fileupload组件的简单封装
import java.util.HashMap;
对commons fileupload组件的简单封装
对commons fileupload组件的简单封装
import java.util.Iterator;
对commons fileupload组件的简单封装
对commons fileupload组件的简单封装
import java.util.List;
对commons fileupload组件的简单封装
对commons fileupload组件的简单封装
import java.util.Map;
对commons fileupload组件的简单封装
对commons fileupload组件的简单封装
import javax.servlet.http.HttpServlet;
对commons fileupload组件的简单封装
对commons fileupload组件的简单封装
import javax.servlet.http.HttpServletRequest;
对commons fileupload组件的简单封装
对commons fileupload组件的简单封装
对commons fileupload组件的简单封装
import org.apache.commons.fileupload.FileItem;
对commons fileupload组件的简单封装
对commons fileupload组件的简单封装
import org.apache.commons.fileupload.FileUploadException;
对commons fileupload组件的简单封装
对commons fileupload组件的简单封装
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
对commons fileupload组件的简单封装
对commons fileupload组件的简单封装
import org.apache.commons.fileupload.servlet.ServletFileUpload;
对commons fileupload组件的简单封装
对commons fileupload组件的简单封装
对commons fileupload组件的简单封装
 
         以上代码很简单,看过commons FileUpload组件API的程序员,应该都能看明白。值得注意一下的是:编码问题(setHeaderEncoding),这个方法是从FileUploadBase类里继承的,根据其说明,当读取上传表单的各部分时会用到该encoding,如果没有指定encoding则使用系统缺省的encoding。建议在这里设置成utf-8,并把jsp的charset也设置成utf-8,否则可能会出现乱码。
测试demo
        好了,下面我就写个简单的demo吧,说明一下MutiFileUpload的用法。
       1.新建一个jsp页面,注意设置form表单的enctype,如下:
对commons fileupload组件的简单封装   <form id="form1" method="post" action="../servlet/UploadServlet" enctype="multipart/form-data">
对commons fileupload组件的简单封装                
对commons fileupload组件的简单封装                
<tr>
对commons fileupload组件的简单封装                    
<td width="25%" align="right">上传图片:</td>
对commons fileupload组件的简单封装                    
<td>                            
对commons fileupload组件的简单封装                        
<input id="file1" type="file" NAME="file1" style="width:300px;">                                                        
对commons fileupload组件的简单封装                    
</td>
对commons fileupload组件的简单封装                
</tr>
对commons fileupload组件的简单封装                
<tr>
对commons fileupload组件的简单封装                    
<td width="25%" align="right">上传音频:</td>
对commons fileupload组件的简单封装                    
<td>                            
对commons fileupload组件的简单封装                        
<input id="file2" type="file" NAME="file2" style="width:300px;">                                                        
对commons fileupload组件的简单封装                    
</td>
对commons fileupload组件的简单封装                
</tr>
对commons fileupload组件的简单封装                
<tr align="center" valign="middle">
对commons fileupload组件的简单封装                    
<td height="60" colspan="2">
对commons fileupload组件的简单封装                        
<input type="submit" id="BtnOK" value="确认上传">&nbsp;&nbsp;&nbsp;&nbsp; 
对commons fileupload组件的简单封装                        
<button onclick="javascript:window.opener == null;window.close();">取消上传</button> </td>
对commons fileupload组件的简单封装                
</tr>
对commons fileupload组件的简单封装                
<tr align="center" valign="middle">
对commons fileupload组件的简单封装                    
<td height="60" colspan="2">
对commons fileupload组件的简单封装                         
<input type="text" name="possess" value="private">
对commons fileupload组件的简单封装                    
</td>
对commons fileupload组件的简单封装                
</tr>
对commons fileupload组件的简单封装        
</form>
     2.新建一个UploadServlet并继承自MutiFileUpload,如下:
}
      3.然后在post方法中如下处理:
对commons fileupload组件的简单封装    public void doPost(HttpServletRequest request, HttpServletResponse response)
    }
     选择上传文件,然后我们就可以在/root/upload下看到我们上传的文件了。
        好了,先写到这里吧,具体应用时,我们可能需要很多变通,比如集成到spring,hibernate中,关键是给出一个想法,我们可以对他进行包装变更,使其更适合我们的系统。

相关文章:

  • 2021-10-03
  • 2021-10-03
  • 2021-05-31
  • 2022-12-23
  • 2021-07-06
  • 2021-10-03
  • 2022-12-23
  • 2021-12-15
猜你喜欢
  • 2021-10-13
  • 2021-10-03
  • 2021-10-03
  • 2021-10-03
  • 2021-08-12
  • 2021-10-03
  • 2021-10-03
相关资源
相似解决方案