部分转载于:

http://blog.csdn.net/georgejin/article/details/1706647

http://www.cnblogs.com/loveyunk/p/6089032.html

http://www.cnblogs.com/greenteaone/p/4186619.html

from表单中向后台传递参数的同时要上传文件,所以ENCTYPE="multipart/form-data" 必须要加在form里面,可是这样的话,我在servlet里面用request.getParameter()方法无论如何都只是获得null值.

我这里使用的是commons fileupload的jar包(commons-fileupload-1.2.jar).

先附录之前写的上传文件的工具类:

 public class FileUploadAndDown {

     private Logger logger = Logger.getLogger(FileUploadAndDown.class);

     public String upload(ServletConfig servletconfig, HttpServletRequest request)throws FileUploadException{
HttpSession session = request.getSession();
String username = session.getAttribute("username").toString();
DiskFileUpload fu = new DiskFileUpload();
// 判断表单是否设置了mutipart/form-data
boolean isMultipart = DiskFileUpload.isMultipartContent(request);
if (!isMultipart){
return null;
}else{
fu.setHeaderEncoding(request.getCharacterEncoding());
// 设置允许用户上传文件大小,单位:字节
fu.setSizeMax(10*1024*1024);
// 设置最多只允许在内存中存储的数据,单位:字节
fu.setSizeThreshold(4*1024*1024);
// 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录
String temp = System.getProperty("user.home")+File.separator+"catalogupload";
fu.setRepositoryPath(temp);
File file = new File(temp);
if (!file.exists() || !file.isDirectory()) {
file.mkdir();
}
// 开始读取上传信息 List fileItems = fu.parseRequest(request);
// 依次处理每个上传的文件 Iterator iter = fileItems.iterator();
// 如果需要上传多个文件,将if改称while即可
while(iter.hasNext()) {
FileItem item = (FileItem) iter.next();
// 忽略其他不是文件域的所有表单信息 if (!item.isFormField()) {
String name = item.getName();
String time = DateUtil.getDateTime("yyyyMMddHHmmss");
name = username + "_" + time + FileNameUtil.extractFileExt(name);
try {
String namepath = servletconfig.getServletContext().getRealPath("poster");
file = new File(namepath);
if(!file.exists()){
file.mkdirs();
}
name = namepath+File.separator+name;
item.write(new File(name));
logger.info("上传海报名为:" + name);
return name;
} catch (Exception e) {
logger.error("上传海报保存异常" + e.getMessage());
return null;
}
}
}
}
return "";
}
}

对应的jsp页面

         <form name="form1" action="deleteMmobject.do" method="post" enctype="multipart/form-data" target="displayprocess" >
导入要删除列表文件 &nbsp;&nbsp;&nbsp;
<input type="hidden" id="deleteFlagHidden" name="deleteFlagHidden" value="" />
<input type="hidden" name="action" value="" /> <input type="file" name="filepath" />
<input name="deleteMmobject_radio" id="selfDelete" type="radio" value="自删除" onclick="selfDeleteFun()"; checked />自删除
<input name="deleteMmobject_radio" id="sendToBoDelete" type="radio" value="同时下发删除到下游" onclick="sendToBoDeleteFun()" />同时下发删除到下游
<input type="button" value="确定" onclick="deleteFun()"/>
<!-- <input type="submit" value="确定" /> -->
</form>

通过servlet里面用request.getParameter("id名称")方法无论如何都只是获得null值.   通过更换上传依赖的jar包(jspsmartupload.jar)

新加代码如下:

     public Map<String,String> uploadUseJspSmart(ServletConfig servletconfig, HttpServletRequest request, HttpServletResponse response)throws FileUploadException{
Map<String,String> uploadParametersMap = new HashMap<String,String>();
HttpSession session = request.getSession();
String username = session.getAttribute("username").toString(); com.jspsmart.upload.SmartUpload smartUpload = new com.jspsmart.upload.SmartUpload();
File file = null;
String fileName = null;
try {
smartUpload.initialize(servletconfig, request, response);
smartUpload.setTotalMaxFileSize(100000000);
smartUpload.setAllowedFilesList("txt,excel");
smartUpload.setDeniedFilesList("exe,bat,jsp,htm,html,,"); smartUpload.upload();
// 得到上传的文件对象
com.jspsmart.upload.File smartFile = smartUpload.getFiles().getFile(0); fileName = smartFile.getFileName();
String time = DateUtil.getDateTime("yyyyMMddHHmmss");
fileName = username + "_" + time + FileNameUtil.extractFileExt(fileName);
String namepath = System.getProperty("user.home")+File.separator+"catalogupload"; file = new File(namepath);
if(!file.exists()){
file.mkdirs();
}
fileName = namepath+File.separator+fileName;
smartFile.saveAs(fileName);
logger.info("通过JspSamrt上传文件名为:" + fileName+"成功");
//这里可以顺利得到jsp页面form表单中对应的"deleteFlagHidden"参数
String deleteFlagHidden = smartUpload.getRequest().getParameter("deleteFlagHidden");
uploadParametersMap.put("fileName", fileName);
uploadParametersMap.put("deleteFlagHidden", deleteFlagHidden);
return uploadParametersMap;
} catch (Exception e1) {
e1.printStackTrace();
logger.info("通过JspSamrt上传文件名为:" + fileName+"失败");
}
return null;
}

解决当FORM的ENCTYPE="multipart/form-data" 时request.getParameter()获取不到值的方法的更多相关文章

  1. form 中Enctype=multipart/form-data 的作用

    form 中Enctype=multipart/form-data 的作用 ENCTYPE="multipart/form-data"用于表单里有图片上传. <form na ...

  2. servlet 表单加上multipart/form-data后request.getParameter获取NULL(已解决)

    先上结论(可能不对,因为这是根据实践猜测而来,欢迎指正) 表单改为multipart/form-data传值后,数据就不能通过普通的request.getParameter获取. 文件和文件名通过Fi ...

  3. Form的enctype="multipart/form-data"作用

    <form class="form-horizontal" role="form" method="post" action=&quo ...

  4. 表单form的enctype="multipart/form-data"使用疑惑

    在使用表单传送数据的时候,如果form 加了enctype="multipart/form-data" 这个属性,那么表单请求传到另一个jsp或servlet 里时是不能用requ ...

  5. servler中表单加了enctype="multipart/form-data"属性后request就接收不到表单传过来的值了

    在解决博问node.js接受参数的时候,发现当form中添加enctype:"multipart/form-data",后台确实获取不到数据,于是跑到百度上查了一下,终于明白为什么 ...

  6. request.getParameter()获取URL中文参数乱码的解决办法

    这个问题耽误好长时间,URL传中文参数出现乱码,就算首次使用request接收就添加 request.setCharacterEncoding("UTf-8"); 依然报错不误. ...

  7. 过滤器中处理multipart/form-data头部的post请求request.getParameter(")获取不到参数问题

    如果不是文件类型请求,我们使用request.getParameter("");方法是可以获取到参数内容的,如果是文件类型的请求即请求的头部信息为“multipart/form-d ...

  8. form表单中enctype="multipart/form-data"的传值问题

    form表单中enctype="multipart/form-data"的传值问题!! Form表单中enctype="multipart/form-data" ...

  9. node进阶| 解决表单enctype="multipart/form-data" 时获取不到Input值的问题

    今天在学习node踩到一个坑:form设置enctype="multipart/form-data"上传文件时,无法获取到表单其他input的值. 因为之前上传文件用的是 form ...

随机推荐

  1. @RequestBody jackson解析复杂的传入值的一个坑;jackson解析迭代数组;jackson多重数组;jakson数组

    一.实际开发的一个问题. 传入一个json数组,数组中还嵌套数组,运用springboot+Jpa框架,@RequestBody注解传入数据 Controller @ApiOperation(valu ...

  2. oracle 数据库io 异常,错误代码17002 解决办法

    数据库使用一个月了,突然挂掉:错误代码17002 io异常:read timeout 解决: 1.登陆sql命令窗口 [oracle@hostname ~]$ sqlplus /nolog SQL*P ...

  3. 关于WEB前端,你必须了解的发展方向

    一.职业方向定位 首先,只有确定好自己的职业方向,才能做好职业规划.在我看来,做WEB前端技术能够找到的职业方向有以下几种: (1)资深WEB前端工程师 这个方向算是一个WEB前端最基本的选择了,在国 ...

  4. 词袋模型(BOW, bag of words)

    词集模型:单词构成的集合,每个单词只出现一次. 词袋模型:把每一个单词都进行统计,同时计算每个单词出现的次数. 在train_x中,总共有6篇文档,每一行代表一个样本即一篇文档.我们的目标是将trai ...

  5. C#的委托与Java的自定义接口的异曲同工的同步操作

    C#的委托(以WinForm为例) 在子窗体(ChildFrm)中定义一个委托 this.CaptureListener(callback);//子窗体触发委托事件,以告诉调用的窗体 /// < ...

  6. Beta阶段第五篇Scrum冲刺博客-Day4

    1.站立式会议 提供当天站立式会议照片一张 2.每个人的工作 (有work item 的ID),并将其记录在码云项目管理中: 昨天已完成的工作. 张晨晨:目标增加单词收藏功能 郭琪容:学习收藏功能的实 ...

  7. 【20171101】the first day in a new company

    英文差的要命还飙英文,擦嘞!!! 就是想记录下 点滴 如下配图: | | | V 手动配图这是图!!!

  8. java基础-day10

    第10天 IO 今日内容介绍 u IO流概述及FileWriter类使用 u FileReader类使用 u 缓冲流介绍和使用 u IO流相关案例 第1章   IO流概述及FileWriter类使用 ...

  9. thrift使用总结

    转自 http://blog.csdn.net/qq_27784479/article/details/73250958 Apache Thrift软件框架用于可扩展的跨语言服务开发,简单来说就是RP ...

  10. Alpha冲刺 - (10/10)

    Part.1 开篇 队名:彳艮彳亍团队 组长博客:戳我进入 作业博客:班级博客本次作业的链接 Part.2 成员汇报 组员1(组长)柯奇豪 过去两天完成了哪些任务 本人负责的模块(共享编辑)的前端代码 ...