`
peng_jian_ming
  • 浏览: 255228 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Java上传文件同时含有表单域的实现

    博客分类:
  • Java
阅读更多
package com.yc.eap.util;

import java.io.File;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import org.apache.commons.fileupload.DiskFileUpload;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadBase;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.log4j.Logger;

public class UpLoad {

public static final Logger logger = Logger.getLogger(UpLoad.class);
private HttpServletRequest request = null;
private UpLoad instance = new UpLoad(request);
private Map<String,Object> map = new HashMap<String,Object>();

public UpLoad(HttpServletRequest request){
this.request = request;
}

public Map upLoad(){
    String name = null;
    DiskFileUpload fu = new DiskFileUpload();
    /**用于设定请求消息中实体内容的最大允许大小,这里设置最大上传文件的大小为200M*/
    fu.setSizeMax(200*1024*1024);
    /**设置用临时文件来存放临时解析出的数据值,临时数据值的临界值为1M*/
    fu.setSizeThreshold(1024*1024);
    /**用于存放临时文件的存放目录,必需为绝对路径,如果不设定将存放在Tomcat目录下的temp文件下*/
    //fu.setRepositoryPath("");
    /**parseRequest(request)方法是DiskFileUpload的重要方法是Http请求的入口,如果请求消息中的实体不是
     * "multipart/form-data",该方法将抛出异常*/
    FileUploadBase.isMultipartContent(request);
    List filelist = null;
try {
filelist = fu.parseRequest(request);
} catch (FileUploadException e) {
logger.info("消息实体不是multipart/form-data类型"+e.getMessage());
map.put("flag", "false");
return map;
}
Iterator i = filelist.listIterator();
    while(i.hasNext()){
    FileItem fi = (FileItem)i.next();
    if(fi.isFormField()){
    String fieldName = fi.getFieldName();
    String fieldValue = fi.getString();
    map.put(fieldName, fieldValue);
    }else{
    String fileName = fi.getName();
    if(fileName.trim().equals("")){
    continue;
    }else{
    int start = fileName.indexOf('\\');
    name = fileName.substring(start+1);
    //察看此获取的文件名称
    logger.info("文件的名称"+name);
    /**此处需要设置获取应用的路径名称用来存放文件*/
    File file = new File("",name);
    try {
fi.write(file);
} catch (Exception e) {
logger.info("文件写入错误"+e.getMessage());
map.put("flag", "false");
}finally{
fi.delete();
}
    }
    }
    }
return map;
}

public UpLoad getInstance(HttpServletRequest request) {
return instance;
}

}
分享到:
评论
1 楼 mickeymak 2008-08-26  
你好, 看了你的代码, 不错

不过我有个疑问, 就是如果表单中有同名但不同值的元素, 譬如同名的<checkbox>但有很多值, 可能会有问题哦, 能完善一下吗?

相关推荐

Global site tag (gtag.js) - Google Analytics