文件上传之 commons-fileupload(二)
来源:互联网 发布:淘宝小样几乎都是假的 编辑:程序博客网 时间:2024/06/07 23:55
对commons fileupload上传组件的简单封装
在上一篇文章《利用Jakarta commons fileupload组件实现多文件上传》中,我介绍了commons fileupload组件的基本原理和实现方法。但是在实际操作中,我们需要分析每个FileItem,然后从该FileItem中读取该控件的name和value,显然这不符合我们的习惯。比如我们在页面上有个text文本框:
<input type="text" name ="possess">
我们要取得possess传过来的value,一般我们是这么写的:
String possess = request.getParameter( "possess")
但是在commons fileupload中我们却需要这么处理:
按照上面处理的话,很是不爽,因此我想包装一下,使得使用起来符合我们的习惯。
总体设计思想:
1.我们可以像以前那样,传入控件的name,就可以取得该控件的value,因此我想可以遍历所有FileItem,然后把他们存入一个Map中(key中存入fieldname,value中存入该控件的value),这样就可以达到以上目的了。
2.在该包装类中,我们还要可以设置一些值,从而我们可以更改commons fileupload中的一些配置。
具体实现:2.在该包装类中,我们还要可以设置一些值,从而我们可以更改commons fileupload中的一些配置。
package chb.commons.fileupload.web;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class MutiFileUpload extends HttpServlet {
private static final long serialVersionUID = 670829239023754119L;
protected Map <String, String > parameters; //保存普通form表单域
protected Map <String, FileItem > files; //保存上传的文件
private int sizeThreshold = DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD;
private long sizeMax = -1;
private String encoding = "utf-8";//字符编码,当读取上传表单的各部分时会用到该encoding
public String getEncoding() {
return encoding;
}
public void setEncoding(String encoding) {
this.encoding = encoding;
}
public long getSizeMax() {
return sizeMax;
}
public void setSizeMax( long sizeMax) {
this.sizeMax = sizeMax;
}
public int getSizeThreshold() {
return sizeThreshold;
}
public void setSizeThreshold( int sizeThreshold) {
this.sizeThreshold = sizeThreshold;
}
public void parse(HttpServletRequest request) {
parameters = new HashMap <String, String >();
files = new HashMap <String, FileItem >();
//Create a factory for disk-based file items
DiskFileItemFactory factory = new DiskFileItemFactory();
//Set factory constraints
factory.setSizeThreshold(sizeThreshold);
//factory.setRepository(repository);
//Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
//Set overall request size constraint
upload.setSizeMax(sizeMax);
upload.setHeaderEncoding(encoding);
try {
List items = upload.parseRequest(request);
Iterator iterator = items.iterator();
while(iterator.hasNext()){
FileItem item = (FileItem)iterator.next();
if(item.isFormField()){
String fieldName = item.getFieldName();
String value = item.getString();
parameters.put(fieldName, value);
} else{
String fieldName = item.getFieldName();
files.put(fieldName, item);
}
}
} catch (FileUploadException e) {
e.printStackTrace();
}
}
public String getFileName(FileItem item) {
String fileName = item.getName();
fileName = replace(fileName, "\\","/");
fileName = fileName.substring(fileName.lastIndexOf( "/")+1);
return fileName;
}
public static String replace(String source, String oldString, String newString) {
StringBuffer output = new StringBuffer();
int lengthOfSource = source.length();
int lengthOfOld = oldString.length();
int posStart = 0;
int pos;
while ((pos = source.indexOf(oldString, posStart)) >= 0) {
output.append(source.substring(posStart, pos));
output.append(newString);
posStart = pos + lengthOfOld;
}
if (posStart < lengthOfSource) {
output.append(source.substring(posStart));
}
return output.toString();
}
}
public
}
测试demo
public class UploadServlet extends MutiFileUpload {
}
}
3.然后在post方法中如下处理:
0 0
- 文件上传之 commons-fileupload(二)
- 文件上传之 commons-fileupload(二)
- 文件上传之 commons-fileupload(一)
- 文件上传之 commons-fileupload(一)
- 文件上传之Apache commons fileupload使用
- 文件上传之Apache commons fileupload使用
- 文件上传之Apache commons fileupload使用
- 文件上传之Apache commons fileupload使用
- 文件上传 commons-FileUpload
- Commons FileUpload上传文件
- Commons FileUpload上传文件
- commons-fileupload-文件上传
- commons fileupload 文件上传
- commons-fileupload上传文件
- 文件上传 commons-fileupload
- commons-fileupload 文件上传问题
- commons fileupload 文件上传应用
- Commons-fileupload 文件的上传
- 工作要义
- CareerCup Given an array having positive integers, find a subarray which adds to a given number
- vs2005无法设置断点
- org.hibernate.exception.GenericJDBCException: 只进结果集不支持请求的操作。 异常处理方法
- sicily 1934. 移动小球
- 文件上传之 commons-fileupload(二)
- javascript——js string 转 int
- JAVA工具类 UUID
- Codeforces Round #235 (Div. 2)
- Android 使用Parcelable序列化对象
- JSP中EL表达式、JSTL、java脚本、js嵌套问题
- 猎头如何迅速的了解一个行业 (借鉴猎头)
- Servlet中转发和重定向的路径问题以及表单提交路径问题
- 数位DP小记 + HDU 2089 不要62