`
peng_jian_ming
  • 浏览: 261472 次
  • 性别: 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>但有很多值, 可能会有问题哦, 能完善一下吗?

相关推荐

    java poi操作word模版文件生成表单和修改

    在这个场景中,我们将重点讨论如何使用Java POI来操作Word模板文件,生成表单以及进行修改,特别是处理含有下拉框等交互元素的情况。 首先,让我们了解Java POI的基本用法。要操作Word文档,我们需要导入`org....

    Struts2文件上传和下载教程

    为了提高代码的灵活性和可扩展性,推荐使用集合(如List)来封装多个上传文件。这样可以在Action中统一处理所有文件,而不是为每个文件域指定单独的属性。 **2.2 文件过滤** 实现文件过滤通常是为了限制用户上传的...

    ssh(structs,spring,hibernate)框架中的上传下载

     其中save(FileActionForm fileForm)方法,将封装在fileForm中的上传文件保存到数据库中,这里我们使用FileActionForm作为方法入参,FileActionForm是Web层的表单数据对象,它封装了提交表单的数据。将...

    ASP200问.EXE

    123.利用Stream上传文件 124.计算下载一个文件需要多长时间 第8章 表单与页面显示 127.如何处理单个网页中多个表单的提交 128.如何防止表单被多次提交 129.如何防止表单在网站外被提交 130.如何解决表单发送数据...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    生成一个名为test.php3的文件,含有以下内容: (); ?&gt; 然后在你的浏览器中打开此文件。看看这个页面你就知道你的PHP安装使用的选项了。 2.3 语法 就像前面提到的一样,你可以混合编写你的PHP代码和HTML代码。因此...

    2017年最新PHP经典面试题目汇总(上篇)

    - `$_FILES`:用于通过HTTP文件上传处理上传的文件。 - `$_SERVER`:包含有关服务器和执行环境的信息。 - `$_SESSION`:用于保存会话数据。 - `$_COOKIE`:用于访问由客户端发送的cookie。 ### HTTP请求方法的区别 ...

Global site tag (gtag.js) - Google Analytics