部分转载于:

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. Linux未安装上传下载的插件,怎么进行文件的上传下载

    首先连上服务: 然后Alt+p,打开SFTp窗口: 例如,我们今天要往tomcat的webappmu目录下上传一个文件: 先pwd,查看我们Linux上所处的目录:pwd 然后进入到tomcat的we ...

  2. pageshow和pagehide事件

    Firefox和opera有一个特性,往返缓存:可以在用户使用浏览器的后退和前进按钮时加快页面的转换速度,这个缓存不仅保存了页面的数据,还有DOM和JavaScript的状态. 为了更形象的说明bfc ...

  3. IDEA插件开发总结

    一:前置步骤 1.添加开发插件所需的SDK: 1.1先添加JDK 1.2打开Project Structure-Platform Settings-SDKs 1.3添加IntelliJ Platfor ...

  4. git windows下载安装 (git命令)

    Set up git At the heart of GitHub is an open source version control system (VCS) called Git. Git is ...

  5. lca tarjin

    这个算法  我个人认为是  遍历每一个点把它当成一些询问的最近祖先 1 2 3 4 5 6 low是并差集,vis是是否访问过,访问过为true,没有为false: 假设询问是(4,4),(4,5), ...

  6. yum-本地源配置(CentOS7)

    服务器版本查看:# cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core) 一.挂载ISO文件: 1.ISO镜像下载网站:网易镜像: ...

  7. cxGrid用法-最新

    cxGrid用法-最新 在做AdoHelper实用程序的时候,我用了DevExpress的cxGrid控件.在此之前用的是dbgrid,考虑到不能把所有的数据都拉到本地,我用了动态生成的select ...

  8. Android-WebView与本地HTML (Java调用--->HTML的方法)-(new WebView(this)方式)

    之前的博客,Android-WebView与本地HTML (Java调用--->HTML的方法),是在 findViewById(R.id.webview);,来得到WebView, 此博客使用 ...

  9. redis集群(主从配置)

    市面上太多kv的缓存,最常用的就属memcache了,但是memcache存在单点问题,不过小日本有复制版本,但是使用的人比较少,redis的出现让kv内存存储的想法成为现实.今天主要内容便是redi ...

  10. NET npoi帮助类

    nuget添加npoi /// <summary> /// npoi帮助类 /// </summary> public static class NpoiHelper { // ...